From de89ef49da9314da0395287ff2e4ee2e9a94ccc2 Mon Sep 17 00:00:00 2001 From: Liangsheng Yin Date: Fri, 3 Oct 2025 12:31:13 +0800 Subject: [PATCH] [CI]] Tee server logs to both file and stdout/stderr using PIPE (#11185) --- python/sglang/test/test_utils.py | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/python/sglang/test/test_utils.py b/python/sglang/test/test_utils.py index ddab8bbf6..060a41c13 100644 --- a/python/sglang/test/test_utils.py +++ b/python/sglang/test/test_utils.py @@ -9,6 +9,7 @@ import os import random import re import subprocess +import sys import threading import time import unittest @@ -566,11 +567,30 @@ def popen_launch_server( if return_stdout_stderr: process = subprocess.Popen( command, - stdout=return_stdout_stderr[0], - stderr=return_stdout_stderr[1], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, env=env, text=True, + bufsize=1, ) + + def _dump(src, sinks): + for line in iter(src.readline, ""): + for sink in sinks: + sink.write(line) + sink.flush() + src.close() + + threading.Thread( + target=_dump, + args=(process.stdout, [return_stdout_stderr[0], sys.stdout]), + daemon=True, + ).start() + threading.Thread( + target=_dump, + args=(process.stderr, [return_stdout_stderr[1], sys.stderr]), + daemon=True, + ).start() else: process = subprocess.Popen(command, stdout=None, stderr=None, env=env)