0

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

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

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

nohup python count.py >> test.log &

$tail -f test.log 

当我尾随它时,什么也没有出现。

4

2 回答 2

8

当您重定向 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)
于 2013-06-07T21:42:22.057 回答
0

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

于 2013-06-07T21:43:19.163 回答