Дочерние процессы Python с ограничением времени
ChildHarbor — Windows-клиент для проверки обёртки запуска доверенного дочернего процесса Python с ИИ. Обсудите допустимый тайм-аут и завершение прямого потомка с совместимой моделью; доверие к запускаемому коду оцениваете вы.
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)| Проверьте перед применением | Сравните фактическое поведение с ожидаемым. Если проверка не проходит, разберитесь в причине перед следующими изменениями. |
|---|---|
| Подключение | Базовый URL, учётные данные и доступный сервер. |
| Проект | Проверьте 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, позволяющий изучать код управления процессами в обсуждении проекта. Сначала укажите, какой код считается доверенным для запуска и что должен наблюдать вызывающий код. До предложения изменений попросите подключённую модель изучить существующую оболочку, чтобы предложение сохранило её назначение и ограничения.
Конкретная задача — оболочка доверенного дочернего процесса Python с существующей рабочей папкой и ограниченным тайм-аутом. Обсудите вывод Unicode, завершения с ошибками и поведение при превышении времени непосредственным дочерним процессом. Отделяйте требования от изоляции безопасности: разрешение запуска доверенного кода не превращает оболочку в песочницу для произвольного ввода.
Проверяйте правку на собственных тестовых процессах. В среде разработки проверьте захваченный вывод, статус завершения и путь тайм-аута непосредственного дочернего процесса. Если важны процессы-потомки, явно определите и исследуйте это дополнительное требование. Успешный тест тайм-аута одного дочернего процесса не доказывает очистку всего дерева процессов; сохраняйте это различие при проверке.
ChildHarbor поддерживает подключения к конечным точкам, совместимым с OpenAI или Anthropic, с учётными данными при необходимости. Модель ИИ без фильтров можно выбрать там, где её предоставляет конечная точка. Сервер и модель определяют контекст, доступные инструменты и ограничения; выбор модели не разрешает запуск недоверенного кода и не подтверждает правильность предложенной оболочки.
Вопросы до изменения кода запуска процессов
Что указать о доверенном вводе?
Укажите, кто предоставляет скрипт и почему приложение разрешает его запуск. Оставьте эту предпосылку явной в задаче. Если скрипты поступают от недоверенных пользователей, проблема безопасности шире, чем добавление тайм-аута к существующей оболочке.
Означает ли тайм-аут завершение всех потомков?
Нет. Проверьте, каким именно процессом управляет реализация, и протестируйте это в своей среде. Если приложению нужна очистка дерева процессов, сделайте её отдельным явным требованием и изучите платформозависимую реализацию, а не выводите её из обработки непосредственного дочернего процесса.
Зачем тестировать вывод Unicode наряду с завершениями с ошибкой?
Они проверяют разные части контракта оболочки с вызывающим кодом. Добавьте ожидаемый текст и поведение завершения, чтобы предложение сохраняло оба. Процесс может работать правильно, но декодирование вывода или сообщение об ошибке всё же даст приложению непригодный результат.
Нужно ли выполнять каждый предложенный в обсуждении скрипт?
Проверяйте код и его последствия до запуска. Обсуждение в среде помогает объяснить предложение, но решение о доверии остаётся за вами. Используйте подходящие тестовые данные проекта и не считайте текст модели разрешением на выполнение произвольных операций.
ChildHarbor · Обновлено 2026-10-25