将python代码的stdout重定向到文件,而不让python将其锁定

将python代码的stdout重定向到文件,而不让python将其锁定,python,linux,file-io,stdout,Python,Linux,File Io,Stdout,我正在尝试最简单的方法,使用如下命令将python代码的stdout重定向到文件 python foo.py > SmokeyStover.log 这很好,只是我需要停止我的python代码,以便能够将添加的日志读取到此日志文件中,并读取诸如 tail -f SmokeyStover.log 当代码运行时,使用python解释器,实时日志流中没有任何传入日志被连续附加到此文件 我还使用了其他方法来重定向stdio,在python代码中使用如下命令,文件不会被刷新 sys.stdout

我正在尝试最简单的方法,使用如下命令将python代码的
stdout
重定向到文件

python foo.py > SmokeyStover.log
这很好,只是我需要停止我的python代码,以便能够将添加的日志读取到此日志文件中,并读取诸如

tail -f SmokeyStover.log 
当代码运行时,使用python解释器,实时日志流中没有任何传入日志被连续附加到此文件

我还使用了其他方法来重定向
stdio
,在python代码中使用如下命令,文件不会被刷新

sys.stdout = open('SmokeyStover.log', 'a')

您可能必须手动刷新缓冲区,例如:

import sys
import time


for i in range(100):
    print "number is %s " %i
    time.sleep(1)
    sys.stdout.flush()

python foo.py
的输出将重定向到
SmokeyStover.log
。但是,在您停止
python foo.py
之前,它不会将数据刷新到
SmokeyStover.log
这就是我的理解。请尝试
python-u foo.py>SmokeyStover.log
以获得无缓冲输出。如果这是linux,你可以使用像我读到的
python foo.py | tee xxx.log
这样的方法,最好是
flush()
后跟
os.fsync(sys.stdout)