You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python sys.stdout缓冲问题:如何实现每行实时写入文件?

解决方案

步骤1:调整代码(仅修改非main函数部分)

保留main()函数完全不动,移除代码中手动替换sys.stdout/sys.stderr的逻辑,让输出默认走系统标准输出/错误流:

import sys
import time

def main():
    for i in range(100):
        print("One line every 2s", end = "\n")
        time.sleep(2)

if __name__ == '__main__':
    # 移除原有的文件重定向逻辑,直接执行main
    main()

步骤2:通过Bash命令运行并重定向输出

使用python -u参数强制Python禁用标准输出缓冲,同时通过Bash重定向将输出写入目标文件:

python -u your_script.py > log.out 2> log.err

原理说明

  • python -u会让Python的默认标准输出/错误流变为无缓冲模式,每次print调用后立即刷新输出。
  • Bash重定向>和2>会将进程的标准输出、标准错误分别写入log.out和log.err,结合-u参数就能实现每行输出实时写入文件。

之前的方法无效是因为代码中手动将sys.stdout替换为了自己打开的文件对象,python -u和PYTHONUNBUFFERED仅对Python默认的标准输出流生效,无法影响手动创建的文件对象的缓冲行为。

内容的提问来源于stack exchange,提问作者dave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 15:20:22