制限時間付きPython子プロセス
最大4096文字の信頼できるPythonコードを既存ディレクトリで50–5000 msの制限付きで実行してください。
import math, os, subprocess, sys
from pathlib import Path
def run_trusted_python(script, seconds, folder):
if type(script) is not str or len(script) > 4096:
raise ValueError("child.script")
if type(seconds) not in (int, float) or not .05 <= seconds <= 5 or not math.isfinite(seconds):
raise ValueError("child.timeout")
if not isinstance(folder, (str, Path)) or not Path(folder).is_dir():
raise ValueError("child.folder")
return subprocess.run([sys.executable, "-I", "-S", "-X", "utf8", "-c", script],
cwd=folder, timeout=seconds, capture_output=True, text=True,
encoding="utf-8", check=False,
creationflags=subprocess.CREATE_NO_WINDOW if os.name == "nt" else 0)| 適用前に確認 | 実際の動作を期待する結果と比較します。検証に失敗した場合は、次の変更を加える前に原因を調べてください。 |
|---|---|
| モデル | OpenAI互換またはAnthropicのエンドポイントを、ベースURLと必要なAPIキーで設定し、接続をテストします。ローカルのモデルサーバーは起動が必要です。リモートツールは別途データを送信する場合があります。 |
| プロジェクト | Unicode、異常終了、直接の子の停止を試し、不正な制限を拒否して隔離や子孫の終了を保証しないでください。 |
import math, os, subprocess, sys
from pathlib import Path
def run_trusted_python(script, seconds, folder):
if type(script) is not str or len(script) > 4096:
raise ValueError("child.script")
if type(seconds) not in (int, float) or not .05 <= seconds <= 5 or not math.isfinite(seconds):
raise ValueError("child.timeout")
if not isinstance(folder, (str, Path)) or not Path(folder).is_dir():
raise ValueError("child.folder")
return subprocess.run([sys.executable, "-I", "-S", "-X", "utf8", "-c", script],
cwd=folder, timeout=seconds, capture_output=True, text=True,
encoding="utf-8", check=False,
creationflags=subprocess.CREATE_NO_WINDOW if os.name == "nt" else 0)信頼の境界を保ったままプロセス用ラッパーをレビューする
ChildHarborは、プロジェクトの会話でプロセス管理コードを検討するWindows向けAIコーディングクライアントです。まず実行を信頼するコードと、呼び出し側が観測すべき内容を示してください。目的と制限の両方を提案が維持できるよう、変更を提案する前に既存のラッパーを接続モデルに確認させます。
具体的な作業は、既存の作業ディレクトリと制限付きタイムアウトを使う、信頼済みPython子プロセスのラッパーです。Unicode出力、失敗時の終了、直接の子プロセスが時間制限を超えた場合を議論します。これらの要件はセキュリティ上の隔離とは分けてください。信頼したコードの実行を受け入れることは、任意の入力向けのサンドボックスになることを意味しません。
自分のプロセス用テストデータに照らして編集案をレビューします。開発環境で取得出力、終了ステータス、直接の子プロセスのタイムアウト経路を確認してください。子孫プロセスが重要なら、その追加要件を明示して調査します。1つの子のタイムアウトテストに成功しても、プロセスツリー全体を終了・解放できる証拠にはならないため、レビューでもその違いを保ちます。
ChildHarborはOpenAI互換またはAnthropicのエンドポイント接続に対応し、必要な場合は認証情報を使います。エンドポイントが提供する場合はフィルタリングのないAIモデルを選べます。コンテキスト、利用可能なツール、制限はサーバーとモデルが決めます。モデルの選択は、信頼できないコードの実行を許可するものでも、ラッパー案の妥当性を検証するものでもありません。
プロセス起動コードを変える前の質問
信頼した入力について何を示すべきですか?
スクリプトの提供者と、アプリケーションがその実行を許す理由を特定します。その前提を作業で明示してください。信頼できない利用者からスクリプトが来るなら、セキュリティの問題は既存のラッパーにタイムアウトを加えるだけでは収まりません。
タイムアウトはすべての子孫の終了を意味しますか?
いいえ。実装がどのプロセスを制御するか正確に確認し、自分の環境でテストしてください。プロセスツリー全体の終了・解放が必要なら、直接の子の処理から推測せず、別の明示的な要件としてプラットフォーム固有の実装を確認します。
失敗時の終了だけでなくUnicode出力もテストするのはなぜですか?
ラッパーの呼び出し側との仕様の異なる部分を試すためです。両方を提案が維持するよう、期待するテキストと終了動作を含めます。プロセスが正しく動いても、出力のデコードやエラー報告でアプリケーションには使えない結果になる場合があります。
会話で提案されたスクリプトはすべて実行すべきですか?
実行前にコードと影響をレビューしてください。この環境での会話は提案の説明に役立ちますが、信頼するかの判断は利用者が行います。適切なプロジェクト用テストデータを使い、モデルが生成したテキストを任意の操作の実行許可と見なさないでください。
ChildHarbor · 更新日 2026-10-25