使用tee从python获取实时打印语句

时间:2014-10-09 01:08:28

标签: python stdout tee

我有一个看起来像这样的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实时查看输出吗?

1 个答案:

答案 0 :(得分:21)

与许多程序一样,Python试图最小化它调用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.
相关问题