当前位置: 首页 > 知识库问答 >
问题:

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

习宸
2023-03-14

我有一个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实时查看输出吗?

共有1个答案

双俊人
2023-03-14

像许多程序一样,Python试图最小化它调用系统调用的次数。它通过收集几个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.
 类似资料:
  • 问题内容: 我想获取一个输出,这是我的代码: 如何获得打印输出的内容?我如何得到类似的东西: 问候和感谢。 问题答案: 我和Frédéric有着相同的想法,但是我写了一个上下文管理器来处理替换stdout:

  • 问题内容: 为什么Python在第9行的简单语句中给我一个语法错误? Python的版本是: 问题答案: 在Python 3中,print是一个函数,您需要像这样调用它。

  • 问题内容: 为什么在Python 3中打印字符串时会收到语法错误? 问题答案: 此错误消息表示你尝试使用Python 3遵循示例或运行使用Python 2t语句的程序: 上面的语句在Python 3中不起作用。在Python 3中,你需要在要打印的值周围添加括号: “ SyntaxError:对’print’的调用中缺少括号”是Python 3.4.2中添加的新错误消息,主要用于帮助试图在运行Py

  • 问题内容: 最近我一直在用Python编写很多代码。而且我一直在使用以前从未使用过的数据,使用以前从未见过的公式来处理大型文件。所有这些使我写了很多打印语句来验证是否一切正常,并确定故障点。但是,通常,输出太多信息不是一个好习惯。仅当我要调试时才使用打印语句,而当我不希望打印它们时如何跳过它们? 问题答案: 该模块具有您想要的一切。乍一看似乎有些多余,但只使用您需要的零件。我推荐使用切换日志级别和

  • 问题内容: 我最近切换了操作系统,并正在使用较新的Python(2.7)。在旧系统上,我曾经能够即时打印。例如,假设我有一个计算密集的for循环: 然后当代码完成每次迭代时,它将打印 但是,在我当前的系统上,python似乎缓存了stdout,因此终端空白了几分钟,然后输出: 短期内。然后,几分钟后,它将打印: 等等。如何在到达语句后立即进行python打印? 问题答案: 尝试在打印后调用冲洗标准

  • 问题内容: 我正在学习Python,甚至无法编写第一个示例: 这给 指向2。 为什么是这样?我正在使用3.1版 问题答案: 那是因为在Python 3中,他们用 函数 替换了该 语句 。 __ 现在的语法与以前差不多,但是需要parens: 从“ python 3新增功能”文档中: