Esecuzione temporizzata di processi figli Python
Esegui testo Python fidato fino a 4096 caratteri in una cartella esistente con un limite di 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)| Controlla prima di applicare | Confronta il comportamento effettivo con il risultato atteso. Se una verifica fallisce, indaga la causa prima di altre modifiche. |
|---|---|
| Modelli | Configura un endpoint compatibile con OpenAI o Anthropic usando URL di base e chiave API, se necessaria. Prova la connessione. Il server locale deve essere in esecuzione; gli strumenti remoti possono trasmettere dati separatamente. |
| Progetto | Prova Unicode, uscite fallite e termine del figlio diretto, rifiutando limiti invalidi senza promettere isolamento o pulizia dei discendenti. |
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)Rivedi un wrapper di processi mantenendo intatto il confine di fiducia
ChildHarbor è un client di programmazione con IA per Windows che permette di esaminare codice di gestione dei processi in una conversazione sul progetto. Inizia specificando quale codice è attendibile per l'esecuzione e che cosa deve osservare il chiamante. Chiedi al modello collegato di esaminare il wrapper esistente prima di suggerire modifiche, affinché la proposta ne preservi scopo e limiti.
Un'attività concreta è un wrapper per un processo figlio Python attendibile, con una directory di lavoro esistente e un timeout limitato. Discuti output Unicode, uscite con errore e ciò che accade quando il figlio diretto supera il limite temporale. Mantieni questi requisiti separati dall'isolamento di sicurezza: accettare codice attendibile per l'esecuzione non rende il wrapper una sandbox per input arbitrari.
Rivedi la modifica proposta usando i tuoi casi di prova dei processi. Verifica output acquisito, stato di uscita e percorso di timeout del figlio diretto nel tuo ambiente di sviluppo. Se contano i processi discendenti, definisci e indaga esplicitamente quel requisito aggiuntivo. Un test di timeout riuscito su un figlio non dimostra che l'intero albero dei processi venga ripulito: mantieni quindi questa distinzione nella revisione.
ChildHarbor supporta connessioni a endpoint compatibili con OpenAI o Anthropic, con credenziali ove richieste. Puoi selezionare un modello IA senza filtri dove l'endpoint lo offre. Server e modello determinano contesto, strumenti disponibili e restrizioni; scegliere un modello non autorizza l'esecuzione di codice non attendibile né valida il wrapper proposto.
Domande prima di modificare il codice di avvio dei processi
Che cosa devo dire sugli input attendibili?
Identifica chi fornisce lo script e perché l'applicazione ne consente l'esecuzione. Mantieni esplicita tale ipotesi nell'attività. Se gli script possono provenire da utenti non attendibili, il problema di sicurezza è più ampio dell'aggiunta di un timeout al wrapper esistente.
Un timeout implica la terminazione di tutti i discendenti?
No. Rivedi esattamente quale processo controlla l'implementazione e verifica il comportamento nel tuo ambiente. Se l'applicazione richiede la pulizia dell'albero dei processi, rendila un requisito separato ed esplicito ed esamina l'implementazione specifica della piattaforma invece di dedurla dalla gestione del figlio diretto.
Perché testare l'output Unicode oltre alle uscite con errore?
Esercitano parti diverse del contratto del wrapper con il chiamante. Includi testo e comportamento di uscita attesi affinché la proposta li preservi entrambi. Un processo può funzionare correttamente mentre decodifica dell'output o segnalazione degli errori forniscono all'applicazione un risultato inutilizzabile.
Devo eseguire ogni script suggerito nella conversazione?
Rivedi il codice e i suoi effetti prima di eseguirlo. La conversazione nello spazio di lavoro può aiutare a spiegare una proposta, ma la decisione di fiducia spetta a te. Usa casi di prova appropriati del progetto ed evita di trattare il testo generato dal modello come autorizzazione a eseguire operazioni arbitrarie.
ChildHarbor · Aggiornato 2026-10-25