我有一个看起来像这样的python脚本:
for item in collection:
print "what up"
#do complicated stuff that takes a long time.
在bash中,我通过执行以下操作来运行此脚本:
$ python my.py | tee my_file.txt
但是,我在bash中看到的只是一个空行,直到程序结束。然后,所有的打印语句都在一个。
这是发球台的预期操作吗?我可以使用tee实时查看输出吗?
答案 0 :(得分:21)
write
系统调用的次数。它通过在将几个print
语句实际写入其标准输出文件之前收集它们的输出来完成此操作。此过程称为缓冲输出。
当Python连接到终端时,它不会缓冲其输出。这是有道理的,因为终端的人想要立即看到输出。
当Python写入文件(或管道)时,它会缓冲其输出。这也是有道理的,因为在过程完成之前没有人会看到输出
只要您想强制Python将其缓冲输出写入其标准输出文件,您就可以通过调用sys.stdout.flush()
来取消此优化。
在你的情况下,试试这个:
import sys
...
for item in collection:
print "what up"
sys.stdout.flush()
#do complicated stuff that takes a long time.