From 9037c6732861715fe2bfe00f94e1f6b9401c6581 Mon Sep 17 00:00:00 2001 From: banteg <4562643+banteg@users.noreply.github.com> Date: Mon, 29 Dec 2025 03:45:06 +0400 Subject: [PATCH] refactor: harden codex stderr drain --- .../src/codex_telegram_bridge/exec_bridge.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/codex_telegram_bridge/src/codex_telegram_bridge/exec_bridge.py b/codex_telegram_bridge/src/codex_telegram_bridge/exec_bridge.py index c913502..31ac843 100644 --- a/codex_telegram_bridge/src/codex_telegram_bridge/exec_bridge.py +++ b/codex_telegram_bridge/src/codex_telegram_bridge/exec_bridge.py @@ -41,6 +41,15 @@ def extract_session_id(text: str | None) -> str | None: return None +def _drain_stderr(stderr, lines: list[str]) -> None: + try: + for line in stderr: + logger.info("[codex][stderr] %s", line.rstrip()) + lines.append(line) + except Exception as e: + logger.debug("[codex][stderr] drain error: %s", e) + + def setup_logging(log_file: str | None) -> None: logger.setLevel(logging.DEBUG) logger.handlers.clear() @@ -250,13 +259,7 @@ class CodexExecRunner: proc.stdin.close() stderr_lines: list[str] = [] - - def _drain_stderr() -> None: - for line in proc.stderr: - logger.info("[codex][stderr] %s", line.rstrip()) - stderr_lines.append(line) - - t = threading.Thread(target=_drain_stderr, daemon=True) + t = threading.Thread(target=_drain_stderr, args=(proc.stderr, stderr_lines), daemon=True) t.start() found_session: str | None = session_id