【问题标题】:python releases output to tee very slowly [duplicate]python非常缓慢地向tee释放输出[重复]
【发布时间】:2023-03-08 20:04:01
【问题描述】:

我正在运行这样的命令:

python mycode.py | tee foobar.log 

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

谢谢!

【问题讨论】:

  • 使用标准输出可能会有所帮助。试一试。
  • 这不可能是另一个问题的重复,因为我在这里接受的答案将是一个非常不正确的答案(在 C++ 中当然没有使用 Python 命令行的直接等价物影响程序行为的选项)。那里的答案可以适应在 Python 中使用,但在这种情况下并不是最好的方法。
  • 我同意@SteveJessop,这里接受的答案除了另一个问题的答案之外,还为这个问题增加了价值,我实际上使用了现在的答案。其他问题的链接很有用,但不重复。

标签: python ubuntu tee


【解决方案1】:
python -u mycode.py | tee foobar.log

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

【讨论】:

    猜你喜欢
    • 2011-01-10
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 2019-05-09
    • 1970-01-01
    相关资源
    最近更新 更多