プロセスとコード実行
DaytonaのTS SDK / Python SDKは、サンドボックス内のprocess
モジュールを通じて強力なプロセスとコード実行機能を提供します。本ガイドでは、利用可能なプロセス操作のすべてとベストプラクティスを解説します。
プロセスとコード実行
Daytona SDK は、Python と TypeScript でコードを実行できます。
コードの実行
Daytona SDK は、Python と TypeScript のコードスニペット実行に対応しています。入力、タイムアウト、環境変数を指定して実行できます。
# Python コードを実行response = sandbox.process.code_run('''def greet(name): return f"Hello, {name}!"
print(greet("Daytona"))''')
print(response.result)
// TypeScript コードを実行let response = await sandbox.process.codeRun(`function greet(name: string): string { return \`Hello, \${name}!\`;}
console.log(greet("Daytona"));`);console.log(response.result);
// argv と環境変数を指定して実行response = await sandbox.process.codeRun( ` console.log(\`Hello, \${process.argv[2]}!\`); console.log(\`FOO: \${process.env.FOO}\`); `, { argv: ["Daytona"], env: { FOO: "BAR" } });console.log(response.result);
// タイムアウトを指定して実行response = await sandbox.process.codeRun( 'setTimeout(() => console.log("Done"), 2000);', undefined, 5000);console.log(response.result);
プロセスとコード実行
Daytona SDK は、サンドボックス(Daytonaが管理する隔離された一時的な実行環境)内でシェルコマンドを実行し、バックグラウンドプロセスを管理できます。実行時の作業ディレクトリはデフォルトで現在のサンドボックスユーザーのホーム配下です。たとえば workspace/repo
は /home/[username]/workspace/repo
を指しますが、絶対パス(先頭を /
にする)を指定して上書きできます。
コマンドの実行
Daytona SDK は、Python と TypeScript からシェルコマンドを実行できます。標準入力、タイムアウト、環境変数を指定してコマンドを実行可能です。
# 任意のシェルコマンドを実行response = sandbox.process.exec("ls -la")print(response.result)
# 作業ディレクトリとタイムアウトを設定response = sandbox.process.exec("sleep 3", cwd="workspace/src", timeout=5)print(response.result)
# 環境変数を渡すresponse = sandbox.process.exec("echo $CUSTOM_SECRET", env={ "CUSTOM_SECRET": "DAYTONA" })print(response.result)
// 任意のシェルコマンドを実行const response = await sandbox.process.executeCommand("ls -la");console.log(response.result);
// 作業ディレクトリとタイムアウトを設定const response2 = await sandbox.process.executeCommand("sleep 3", "workspace/src", undefined, 5);console.log(response2.result);
// 環境変数を渡すconst response3 = await sandbox.process.executeCommand("echo $CUSTOM_SECRET", "~", { "CUSTOM_SECRET": "DAYTONA" });console.log(response3.result);
セッション(バックグラウンドプロセス)
Daytona SDK は、サンドボックス(Daytonaが管理する隔離された一時的な実行環境)内でバックグラウンドプロセスのセッションを開始・停止・管理する機能を提供します。長時間実行のコマンドを走らせ、プロセスの状態を監視し、稼働中のすべてのプロセスを一覧できます。
長時間実行プロセスの管理
Daytona SDK は、バックグラウンドプロセスの開始および停止機能を提供します。長時間実行のコマンドを実行し、プロセスの状態を監視できます。
# セッションで実行されたコマンドを確認session = sandbox.process.get_session(session_id)print(f"Session {session_id}:")for command in session.commands: print(f"Command: {command.command}, Exit Code: {command.exit_code}")
# 実行中のすべてのセッションを一覧表示sessions = sandbox.process.list_sessions()for session in sessions: print(f"PID: {session.id}, Commands: {session.commands}")
// セッションで実行されたコマンドを確認const session = await sandbox.process.getSession(sessionId);console.log(`Session ${sessionId}:`);for (const command of session.commands) { console.log(`Command: ${command.command}, Exit Code: ${command.exitCode}`);}
// 実行中のすべてのセッションを一覧表示const sessions = await sandbox.process.listSessions();for (const session of sessions) { console.log(`PID: ${session.id}, Commands: ${session.commands}`);}
ベストプラクティス
Daytona SDK は、サンドボックス(Daytonaが管理する隔離された一時的な実行環境)におけるプロセスとコード実行(サンドボックス内でのコマンド/コード実行モジュール)のベストプラクティスを提供します。
- リソース管理
- 長時間実行の処理にはセッションを使用する
- 実行後はセッションを確実にクリーンアップする
- セッションで発生する例外を適切に処理する
# Python - セッションのクリーンアップsession_id = "long-running-cmd"try: sandbox.process.create_session(session_id) session = sandbox.process.get_session(session_id) # 処理を実行...finally: sandbox.process.delete_session(session.session_id)
// TypeScript - セッションのクリーンアップconst sessionId = "long-running-cmd";try { await sandbox.process.createSession(sessionId); const session = await sandbox.process.getSession(sessionId); // 処理を実行...} finally { await sandbox.process.deleteSession(session.sessionId);}
- エラーハンドリング
- プロセスの例外を適切に処理する
- デバッグのためにエラーの詳細を記録する
- エラーハンドリングには try-catch ブロックを使用する
try: response = sandbox.process.code_run("invalid python code")except ProcessExecutionError as e: print(f"Execution failed: {e}") print(f"Exit code: {e.exit_code}") print(f"Error output: {e.stderr}")
try { const response = await sandbox.process.codeRun("invalid typescript code");} catch (e) { if (e instanceof ProcessExecutionError) { console.error("Execution failed:", e); console.error("Exit code:", e.exitCode); console.error("Error output:", e.stderr); }}
よくある問題
Daytona SDK は、プロセスとコードの実行(プロセスとコード実行)に関する一般的な問題のトラブルシューティング手段を提供します。
プロセス実行に失敗する
- コマンドの構文を確認する
- 必要な依存関係を満たしているか確認する
- 必要な権限が付与されていることを確認する
プロセスがタイムアウトする
- タイムアウト設定を調整する
- 長時間実行タスクを最適化する
- バックグラウンド処理の利用を検討する
リソース制限
- プロセスのメモリ使用量を監視する
- プロセスのクリーンアップを適切に行う
- 適切なリソース制約を設定する