重定向到文件时的Python日志显示较晚

时间:2017-02-21 04:01:20

标签: 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,输出会很晚显示在该文件中,或者只有当我按Ctrl+C

退出python应用程序时

为什么我没有立即在重定向文件中看到日志?

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

2 个答案:

答案 0 :(得分:1)

您的案例的最佳选择是设置环境变量Condition not satisfied: response.data == '{"isValid": false}' | | | | | false | java.io.StringReader@35636217 groovyx.net.http.HttpResponseDecorator@5e4fa1da

这比调用PYTHONUNBUFFERED更强大,因为这可能在某些虚拟环境中不起作用。

在您的终端中:

#/usr/bin/python -u

答案 1 :(得分:0)

问题在于输出是缓冲的,这意味着python会将输出保存在缓冲区中,并且不时地将其刷新,但不一定在每次打印后刷新。

您可以通过明确调用sys.stdout.flush()在每次打印后强制刷新来修复。

import time
import sys

while True:
    print "New val"
    sys.stdout.flush()
    time.sleep(1)