Дочірні процеси Python з обмеженням часу
Запустіть довірений текст Python до 4096 символів у наявному каталозі з тайм-аутом 50–5000 мс.
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)| Перевірте перед застосуванням | Порівняйте фактичну поведінку з очікуваним результатом. Якщо перевірка не проходить, з’ясуйте причину перед наступними змінами. |
|---|---|
| Моделі | Налаштуйте OpenAI-сумісний або Anthropic endpoint із базовою URL-адресою та API-ключем, якщо він потрібен. Перевірте з’єднання. Локальний сервер моделі має працювати; віддалені інструменти можуть окремо передавати дані. |
| Проєкт | Перевірте 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