コンテンツにスキップ

プロセスとコード実行

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)

プロセスとコード実行

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)

セッション(バックグラウンドプロセス)

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}")

ベストプラクティス

Daytona SDK は、サンドボックス(Daytonaが管理する隔離された一時的な実行環境)におけるプロセスとコード実行(サンドボックス内でのコマンド/コード実行モジュール)のベストプラクティスを提供します。

  1. リソース管理
  • 長時間実行の処理にはセッションを使用する
  • 実行後はセッションを確実にクリーンアップする
  • セッションで発生する例外を適切に処理する
# 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)
  1. エラーハンドリング
  • プロセスの例外を適切に処理する
  • デバッグのためにエラーの詳細を記録する
  • エラーハンドリングには 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}")

よくある問題

Daytona SDK は、プロセスとコードの実行(プロセスとコード実行)に関する一般的な問題のトラブルシューティング手段を提供します。

プロセス実行に失敗する

  • コマンドの構文を確認する
  • 必要な依存関係を満たしているか確認する
  • 必要な権限が付与されていることを確認する

プロセスがタイムアウトする

  • タイムアウト設定を調整する
  • 長時間実行タスクを最適化する
  • バックグラウンド処理の利用を検討する

リソース制限

  • プロセスのメモリ使用量を監視する
  • プロセスのクリーンアップを適切に行う
  • 適切なリソース制約を設定する