Execução de processos filhos Python com prazo
Execute texto Python confiável de até 4096 caracteres num diretório existente com prazo de 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)| Revise antes de aplicar | Compare o comportamento real com o resultado esperado. Se uma verificação falhar, investigue a causa antes de fazer outras alterações. |
|---|---|
| Modelos | Configure um endpoint compatível com OpenAI ou Anthropic com a URL base e uma chave API, quando necessária. Teste a conexão. O servidor local precisa estar em execução; ferramentas remotas podem transmitir dados separadamente. |
| Projeto | Teste Unicode, saídas com falha e término do filho direto, rejeitando limites inválidos sem prometer isolamento ou limpeza de descendentes. |
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)Revise um encapsulador de processos preservando seu limite de confiança
O ChildHarbor é um cliente de programação com IA para Windows para examinar código de gerenciamento de processos em uma conversa de projeto. Comece declarando qual código é confiável para execução e o que o chamador precisa observar. Peça ao modelo conectado que examine o encapsulador existente antes de sugerir alterações, para que a proposta preserve tanto seu propósito quanto seus limites.
Uma tarefa concreta é um encapsulador de subprocesso Python confiável com um diretório de trabalho existente e um tempo limite delimitado. Discuta a saída Unicode, encerramentos com falha e o que acontece quando o processo filho direto ultrapassa o tempo limite. Mantenha esses requisitos separados do isolamento de segurança: aceitar código confiável para execução não transforma o encapsulador em uma sandbox para entradas arbitrárias.
Revise a edição proposta em relação aos seus próprios casos de teste de processos. Confira a saída capturada, o status de encerramento e o caminho de tempo limite do filho direto no ambiente de desenvolvimento. Se processos descendentes forem relevantes, defina e investigue esse requisito adicional explicitamente. Um teste de tempo limite bem-sucedido em um filho não é evidência de que toda uma árvore de processos seja encerrada; preserve essa distinção na revisão.
O ChildHarbor aceita conexões a endpoints compatíveis com OpenAI ou Anthropic, com credenciais quando exigidas. Um modelo de IA sem filtros pode ser selecionado onde o endpoint o fornecer. O servidor e o modelo determinam contexto, ferramentas disponíveis e restrições; escolher um modelo não autoriza executar código não confiável nem valida o encapsulador proposto.
Perguntas antes de alterar código de inicialização de processos
O que devo dizer sobre entradas confiáveis?
Identifique quem fornece o script e por que a aplicação permite sua execução. Mantenha essa premissa explícita na tarefa. Se os scripts puderem vir de usuários não confiáveis, o problema de segurança será mais amplo do que adicionar um tempo limite ao encapsulador existente.
Um tempo limite implica que todos os descendentes sejam encerrados?
Não. Revise exatamente qual processo a implementação controla e teste esse comportamento no seu ambiente. Se a aplicação exigir o encerramento de toda a árvore de processos, torne isso um requisito explícito separado e examine a implementação específica da plataforma, em vez de deduzi-lo do tratamento do filho direto.
Por que testar saída Unicode além de encerramentos com falha?
Eles exercitam partes diferentes do contrato do encapsulador com o chamador. Inclua o texto esperado e o comportamento de encerramento para que a proposta preserve ambos. Um processo pode executar corretamente enquanto a decodificação da saída ou a comunicação de erros ainda fornece à aplicação um resultado inutilizável.
Devo executar todo script sugerido na conversa?
Revise o código e seus efeitos antes de executá-lo. A conversa no ambiente pode ajudar a explicar uma proposta, mas a decisão de confiança cabe a você. Use casos de teste apropriados do projeto e evite tratar texto gerado pelo modelo como autorização para executar operações arbitrárias.
ChildHarbor · Atualizado 2026-10-25