如何在不修改test.py的前提下实现subprocess实时输出?
无需修改test.py实现subprocess实时输出的方法
问题核心是Python在非交互式环境下默认会缓冲标准输出,导致subprocess调用时无法实时看到打印内容。以下是两种不用修改test.py的解决办法:
方法一:使用Python的-u参数启动脚本
-u参数会强制Python将标准输出和错误输出设置为无缓冲模式,这样test.py的打印内容会实时通过管道传递出来。
run.py示例代码:
import subprocess # 调用test.py时添加-u参数 subprocess.run(["python", "-u", "test.py"])
方法二:设置PYTHONUNBUFFERED环境变量
通过设置环境变量PYTHONUNBUFFERED为1,同样可以让Python禁用标准输出缓冲,效果和-u参数一致。
run.py示例代码:
import subprocess import os # 复制当前环境变量并修改 env = os.environ.copy() env["PYTHONUNBUFFERED"] = "1" # 传递修改后的环境变量启动脚本 subprocess.run(["python", "test.py"], env=env)
如果使用subprocess.Popen而非subprocess.run,上述两种方法同样适用,比如:
import subprocess proc = subprocess.Popen(["python", "-u", "test.py"], stdout=subprocess.PIPE, text=True) for line in proc.stdout: print(line, end='')
内容的提问来源于stack exchange,提问作者ealeon
相关产品推荐
相关产品推荐

