Ejecución temporal de procesos hijos Python
Ejecuta texto Python de confianza de hasta 4096 caracteres en un directorio existente con un plazo 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)| Revisa antes de aplicar | Compara el comportamiento real con el resultado esperado. Si una prueba falla, investiga la causa antes de hacer más cambios. |
|---|---|
| Modelos | Configura un endpoint compatible con OpenAI o Anthropic usando la URL base y, si hace falta, una clave API. Prueba la conexión. Un servidor local debe estar en ejecución; las herramientas remotas pueden enviar datos por separado. |
| Proyecto | Comprueba Unicode, salidas fallidas y terminación del hijo directo, rechazando límites inválidos sin prometer aislamiento ni limpieza de descendientes. |
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)Revisa un envoltorio de procesos conservando su límite de confianza
ChildHarbor es un cliente de programación con IA para Windows donde examinar código de gestión de procesos en una conversación sobre el proyecto. Empieza indicando qué código se considera de confianza para ejecutar y qué necesita observar el consumidor. Pide al modelo conectado que inspeccione el envoltorio existente antes de sugerir cambios, para que la propuesta conserve tanto su finalidad como sus límites.
Una tarea concreta es un envoltorio para un proceso hijo de Python de confianza, con un directorio de trabajo existente y un tiempo límite acotado. Analiza la salida Unicode, las terminaciones fallidas y qué ocurre cuando el hijo directo supera el límite de tiempo. Mantén esos requisitos separados del aislamiento de seguridad: aceptar código de confianza para ejecutarlo no convierte al envoltorio en un entorno aislado para entradas arbitrarias.
Revisa el cambio propuesto con tus propios casos de prueba de procesos. Comprueba la salida capturada, el estado de salida y la ruta de tiempo agotado del hijo directo en tu entorno de desarrollo. Si importan los procesos descendientes, define e investiga explícitamente ese requisito adicional. Superar una prueba de tiempo límite con un hijo no demuestra que se limpie todo el árbol de procesos; conserva esa distinción en la revisión.
ChildHarbor admite conexiones a endpoints compatibles con OpenAI o de Anthropic, con credenciales cuando sean necesarias. Puedes seleccionar un modelo de IA sin filtros cuando tu endpoint lo ofrezca. El servidor y el modelo determinan el contexto, las herramientas disponibles y las restricciones; elegir un modelo no autoriza ejecutar código no fiable ni valida el envoltorio propuesto.
Preguntas antes de cambiar código de lanzamiento de procesos
¿Qué debo indicar sobre las entradas de confianza?
Identifica quién aporta el script y por qué la aplicación permite ejecutarlo. Mantén explícito ese supuesto en la tarea. Si los scripts pueden proceder de usuarios no fiables, el problema de seguridad es más amplio que añadir un tiempo límite al envoltorio existente.
¿Un tiempo límite implica que terminan todos los descendientes?
No. Revisa exactamente qué proceso controla la implementación y prueba ese comportamiento en tu entorno. Si la aplicación requiere limpiar el árbol de procesos, conviértelo en un requisito explícito separado e inspecciona la implementación específica de la plataforma en lugar de deducirlo del tratamiento del hijo directo.
¿Por qué probar salida Unicode además de terminaciones fallidas?
Ejercitan partes diferentes del contrato entre el envoltorio y su consumidor. Incluye el texto y el comportamiento de salida esperados para que la propuesta conserve ambos. Un proceso puede ejecutarse correctamente mientras la decodificación de salida o la notificación de errores siguen dando a la aplicación un resultado inutilizable.
¿Debo ejecutar todos los scripts sugeridos en la conversación?
Revisa el código y sus efectos antes de ejecutarlo. La conversación puede ayudar a explicar una propuesta, pero la decisión de confianza te corresponde. Usa casos de prueba adecuados del proyecto y evita tratar el texto generado por el modelo como autorización para ejecutar operaciones arbitrarias.
ChildHarbor · Actualizado 2026-10-25