Python程序输出写入文件无法实时生效的问题咨询
Python 输出重定向无法实时写入文件的原因与解决方法
问题原因
Python的标准输出(stdout)默认带有缓冲机制:
- 当输出目标是终端时,采用行缓冲模式,每输出一行就会立刻刷新到终端,所以直接运行脚本能实时看到
ding。 - 当输出被重定向到文件时,Python会自动切换为块缓冲模式,只有当缓冲区攒满数据,或者程序终止时,才会一次性把缓冲区的内容写入文件。这就是为什么重定向后log.txt要等到程序终止才会出现内容。
- 而
ping这类系统命令本身设计为无缓冲或行缓冲模式,所以重定向后能实时输出到文件。
解决方法
方法1:运行时禁用缓冲
执行脚本时添加-u参数,强制Python的stdout和stderr使用无缓冲模式:
python -u ding.py >> log.txt
方法2:在print语句中手动刷新缓冲区
修改代码,给print添加flush=True参数,每次输出后立刻刷新缓冲区:
from time import sleep while True: print('ding', flush=True) sleep(0.7)
方法3:修改标准输出的缓冲设置
在代码中直接调整sys.stdout的缓冲模式,比如设置为行缓冲:
import sys from time import sleep # 设置stdout为行缓冲模式 sys.stdout = open(sys.stdout.fileno(), 'w', buffering=1) while True: print('ding') sleep(0.7)
内容的提问来源于stack exchange,提问作者mohali
相关产品推荐
相关产品推荐

