重定向到文件时,Python日志会延迟显示

重定向到文件时,Python日志会延迟显示,python,logging,Python,Logging,我有一个简单的Python测试代码,如下所示: tmp.py import time while True: print "New val" time.sleep(1) 如果按如下方式运行,我会正常看到终端上的日志: python tmp.py 但如果我将日志重定向到日志文件,则需要相当长的时间才能将日志显示在文件中: python tmp.py >/tmp/logs.log 2>&1 如果我执行一个cat/tmp/logs.log,则输出会很晚出现

我有一个简单的Python测试代码,如下所示:

tmp.py

import time

while True:
    print "New val"
    time.sleep(1)
如果按如下方式运行,我会正常看到终端上的日志:

python tmp.py 
但如果我将日志重定向到日志文件,则需要相当长的时间才能将日志显示在文件中:

python tmp.py >/tmp/logs.log 2>&1
如果我执行一个
cat/tmp/logs.log
,则输出会很晚出现在该文件中,或者只有在我通过按
Ctrl+C退出python应用程序时才会出现

为什么我不能在重定向文件中立即看到日志


是否可以像我尝试的那样通过简单的i/o重定向来解决?(通过使用日志等模块,在我的Python代码中不进行代码更改)

问题在于输出是缓冲的,这意味着Python将输出保存在缓冲区中,并不时刷新它,但不一定在每次打印之后

您可以在每次打印后通过显式调用
sys.stdout.flush()
强制刷新来修复此问题


对于您的情况,最好的选择是设置环境变量
PYTHONUNBUFFERED

这比调用
#/usr/bin/python-u
要健壮一些,因为这在某些虚拟环境中可能不起作用

在您的终端中:

export PYTHONUNBUFFERED=1
python tmp.py >/tmp/logs.log 2>&1 #or however else you want to call your script.

尝试使用“-u”选项(python-u tmp.py>/tmp/logs.log 2>&1),谢谢您的帮助!因为我的代码很长。增加大量的潮水需要大量的工作。。因为这个原因,我提到了“Python代码内部没有更改”。感谢你的回复。。
export PYTHONUNBUFFERED=1
python tmp.py >/tmp/logs.log 2>&1 #or however else you want to call your script.