为什么我不能拖尾我的日志?

时间:2013-06-07 21:40:41

标签: python linux ubuntu logging

在我的python脚本中,我有这个:

count = 0
while 1:
    print count
    count += 1

我保存了这个文件然后运行它。

nohup python count.py >> test.log &

$tail -f test.log 

当我拖尾时,没有任何东西出现。

2 个答案:

答案 0 :(得分:7)

重定向Python输出时,stdout流以缓冲模式打开(而不是行缓冲模式)。这意味着在刷新缓冲区之前,输出将保留在内存中,直到打印出足够的行。

要立即查看行,您需要刷新输出流:

import sys

count = 0
while 1:
    print count
    sys.stdout.flush()
    count += 1

或者,使用-u命令行开关强制执行无缓冲的I / O:

nohup python -u count.py >> test.log &

或者您可以使用PYTHONUNBUFFERED环境变量:

PYTHONUNBUFFERED=1 nohup python count.py >> test.log &

或以无缓冲模式重新打开stdout文件句柄:

import os
import sys

sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)

在Python 3.3及更高版本中,这有点简单;你只需告诉print()冲洗:

print(count, flush=True)

答案 1 :(得分:0)

这是因为默认情况下会对标准输出的写入进行缓冲。在缓冲区填满或文件描述符被刷新或关闭之前,您将看不到任何内容。