在我的python脚本中,我有这个:
count = 0
while 1:
print count
count += 1
我保存了这个文件然后运行它。
nohup python count.py >> test.log &
$tail -f test.log
当我拖尾时,没有任何东西出现。
答案 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)
这是因为默认情况下会对标准输出的写入进行缓冲。在缓冲区填满或文件描述符被刷新或关闭之前,您将看不到任何内容。