fix: безопасная перекодировка stdout/stderr и рекурсивная проверка 429

- reconfigure() вместо нового TextIOWrapper — не ломается при редиректе
- _is_429() с рекурсивным обходом ExceptionGroup (anyio оборачивает 429)
- except BaseException в _load_mcp / mcp_call для перехвата ExceptionGroup

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-06-04 19:00:14 +03:00
parent 9cb3731dda
commit 863ea54eaf
2 changed files with 57 additions and 4 deletions
+17
View File
@@ -5,10 +5,27 @@
python run_pipeline.py <id1> <id2> # решить конкретные задания по ID
"""
import asyncio
import io
import os
import sys
os.environ["PYTHONIOENCODING"] = "utf-8"
# Перенастраиваем stdout/stderr на UTF-8 уже после старта Python
# Используем reconfigure() — безопасно при любом типе перенаправления вывода.
try:
if hasattr(sys.stdout, "reconfigure"):
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
elif hasattr(sys.stdout, "buffer"):
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8", errors="replace")
except Exception:
pass
try:
if hasattr(sys.stderr, "reconfigure"):
sys.stderr.reconfigure(encoding="utf-8", errors="replace")
elif hasattr(sys.stderr, "buffer"):
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding="utf-8", errors="replace")
except Exception:
pass
os.environ["PYTHONUNBUFFERED"] = "1"
os.environ["NO_PROXY"] = (
"openrouter.ai,platform.brojs.ru,git.brojs.ru,"