/
servgri
/
interview
Обзор
Документация
Войти
/
servgri
/
interview
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
bot_api/docker_runner.py
53 строки
1 KB
Seal
initial
27 ноя 2025, 03:03
27 ноя 2025, 03:03
447211e
Код
Авторство
О чём код?
import subprocess import tempfile import os SANDBOX_IMAGE = "python:3.12-slim" TIMEOUT = 5 def run_in_sandbox(code: str): """ Запускает python-код в Docker-контейнере sandbox. Возвращает: (ok: bool, output: str) """ try: # 1) Создаём временный файл with tempfile.NamedTemporaryFile(delete=False, suffix=".py", mode="w") as tmp: tmp.write(code) tmp_path = tmp.name # 2) Запуск в Docker с ограничениями cmd = [ "docker", "run", "--rm", "--network=none", "--memory=128m", "-v", f"{tmp_path}:/app/code.py:ro", SANDBOX_IMAGE, "python3", "/app/code.py", ] result = subprocess.run( cmd, capture_output=True, text=True, timeout=TIMEOUT ) success = result.returncode == 0 output = result.stdout if success else result.stderr return success, output.strip() except subprocess.TimeoutExpired: return False, "⏱ Превышено время выполнения" except Exception as e: return False, f"Ошибка sandbox: {e}" finally: try: os.remove(tmp_path) except: pass