python非常缓慢地将输出发布到tee

kom*_*ark 2 python ubuntu tee

我正在运行这样的命令:

python mycode.py | tee foobar.log 
Run Code Online (Sandbox Code Playgroud)

这段代码对stdout进行了很多"打印",没有管道,我可以立即看到一些输出.然而,使用管道和T形管,我需要很长时间才能看到第一个输出,然后有很多.看起来有些缓冲区正在等待填充,只有当它已满时,它才会立即转储所有内容.我不确定它是tee,python还是ubuntu问题.例如,ipython也会出现同样的问题.该怎么办?

谢谢!

Ste*_*sop 9

python -u mycode.py | tee foobar.log
Run Code Online (Sandbox Code Playgroud)

-u表示无缓冲的标准输入/输出.不过,请查看手册页.它在Python2中有一个轻微的捕获(也将标准I/O置于二进制模式,这在Ubuntu中没有区别)和Python3中的不同轻微捕获(文本级I/O仍然是行缓冲的,所以如果你的输出没有'包含许多换行符,你仍然可以看到重要的缓冲).