Běh podřízených procesů Python s limitem
Spusť důvěryhodný text Python do 4096 znaků v existujícím adresáři s limitem 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)| Před použitím zkontrolujte | Porovnejte skutečné chování s očekávaným výsledkem. Pokud kontrola selže, před dalšími změnami zjistěte příčinu. |
|---|---|
| Modely | Nastavte endpoint kompatibilní s OpenAI nebo Anthropic pomocí základní URL a případného API klíče. Otestujte připojení. Lokální server modelu musí běžet; vzdálené nástroje mohou data odesílat samostatně. |
| Projekt | Ověř Unicode, chybové návraty a ukončení přímého dítěte, odmítni neplatné limity bez slibu izolace či úklidu potomků. |
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)Kontrolujte obal procesu při zachování hranice důvěry
ChildHarbor je klient pro programování s AI ve Windows určený ke zkoumání kódu správy procesů v rozhovoru nad projektem. Nejprve uveďte, kterému kódu důvěřujete natolik, aby se spustil, a co potřebuje volající pozorovat. Před návrhy změn požádejte připojený model o kontrolu stávajícího obalu, aby návrh zachoval jeho účel i omezení.
Konkrétní úlohou je obal důvěryhodného podprocesu Pythonu s existujícím pracovním adresářem a omezeným časem běhu. Proberte výstup Unicode, neúspěšná ukončení a chování při překročení limitu přímým potomkem. Tyto požadavky oddělte od bezpečnostní izolace: přijetí důvěryhodného kódu ke spuštění nedělá z obalu sandbox pro libovolný vstup.
Navrženou úpravu prověřte pomocí vlastních testovacích procesů. Ve vývojovém prostředí ověřte zachycený výstup, návratový stav a cestu překročení časového limitu přímého potomka. Pokud záleží na dalších potomcích, tento dodatečný požadavek výslovně určete a prozkoumejte. Úspěšný test limitu jednoho potomka nedokazuje ukončení celého stromu procesů, proto toto rozlišení v kontrole zachovejte.
ChildHarbor podporuje připojení ke koncovým bodům kompatibilním s OpenAI nebo koncovým bodům Anthropic, podle potřeby s přihlašovacími údaji. Model AI bez filtrů lze zvolit tam, kde jej koncový bod nabízí. Server a model určují kontext, dostupné nástroje a omezení; volba modelu neopravňuje ke spouštění nedůvěryhodného kódu ani neověřuje navržený obal.
Otázky před změnou kódu spouštění procesů
Co uvést o důvěryhodném vstupu?
Určete, kdo dodává skript a proč aplikace dovoluje jeho spuštění. Tento předpoklad zachovejte v zadání výslovně. Pokud mohou skripty pocházet od nedůvěryhodných uživatelů, bezpečnostní problém přesahuje přidání časového limitu do stávajícího obalu.
Znamená časový limit ukončení všech potomků?
Ne. Prověřte, který proces implementace přesně řídí, a otestujte chování ve svém prostředí. Pokud aplikace vyžaduje ukončení stromu procesů, stanovte to jako samostatný výslovný požadavek a prohlédněte implementaci pro danou platformu místo odvozování ze správy přímého potomka.
Proč testovat výstup Unicode i neúspěšná ukončení?
Procvičují různé části kontraktu obalu vůči volajícímu. Zahrňte očekávaný text i chování ukončení, aby návrh zachoval obojí. Proces může běžet správně, zatímco dekódování výstupu nebo hlášení chyb dává aplikaci nepoužitelný výsledek.
Mám spouštět každý skript navržený v rozhovoru?
Před spuštěním prověřte kód i jeho účinky. Rozhovor v prostředí může pomoci návrh vysvětlit, ale rozhodnutí o důvěře je na vás. Používejte vhodné projektové testy a nepovažujte text vytvořený modelem za oprávnění provádět libovolné operace.
ChildHarbor · Aktualizováno 2026-10-25