Python发布输出到tee非常缓慢。

4

我正在运行这样的命令:

python mycode.py | tee foobar.log 

这段代码在标准输出(stdout)上有很多"print",没有使用管道(pipe)时我可以立即看到一些输出。然而,使用管道和tee后,需要等待很长时间才能看到第一个输出,而且接下来会有大量的输出。看起来像是某个缓冲区正在等待填充,只有当它被填满时,才会一次性将所有内容转储出来。

我不确定是tee、Python还是Ubuntu的问题。例如,在ipython中也会出现同样的问题。

应该怎么办呢?

谢谢!


刷新标准输出可能会有帮助。试一试吧。 - alvits
2
这绝对不可能是那个问题的重复,因为我在这里接受的答案在那里会是一个极其不正确的答案(当然,在C++中没有直接等价于使用Python命令行选项来影响程序行为的方法)。那里的答案可以适用于Python,但在这种情况下并不是最好的方法。 - Steve Jessop
我同意@SteveJessop的观点,这里的被采纳答案为问题增加了价值,超越了其他问题中的答案,而且我实际上使用了这个现有的答案。链接到其他问题是有用的,但并不重复。 - komark
1个回答

13
python -u mycode.py | tee foobar.log

-u 表示非缓冲的标准输入输出。但务必检查 man 页面,因为在 Python2 中有一点小问题(也会将标准 I/O 设置为二进制模式,在 Ubuntu 中不会有任何影响),而在 Python3 中有一个不同的小问题(文本级别的 I/O 仍然是行缓冲的,因此如果您的输出不包含太多换行符,则仍然可能看到显著的缓冲)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接