使用tee从python获取实时打印语句[重复]

问题描述 投票:0回答:1

我有一个看起来像这样的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的预期操作吗?我可以使用 tee 实时查看输出吗?

python stdout tee
1个回答
48
投票

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.
© www.soinside.com 2019 - 2024. All rights reserved.