【问题标题】:python print function in real timepython实时打印功能
【发布时间】:2011-11-19 19:16:26
【问题描述】:

我最近切换了操作系统并且正在使用更新的 Python (2.7)。在我的旧系统上,我曾经能够即时打印。例如,假设我有一个计算密集的 for 循环:

for i in range(10):
  huge calculation
  print i

然后当代码完成每次迭代时,它将打印i

但是,在我当前的系统上,python 似乎缓存了标准输出,以便终端空白几分钟,然后打印:

1 2 3

紧接着。然后,再过几分钟,它会打印:

4 5 6

等等。如何在 python 到达print 语句后立即打印?

【问题讨论】:

    标签: python printing stdout flush


    【解决方案1】:

    尝试在打印后调用flush of stdout

    import sys
    
    ...
    sys.stdout.flush()
    

    或者使用command line 选项 -u :

    强制标准输入、标准输出和标准错误完全无缓冲。

    【讨论】:

    • 谢谢!这可行,但你知道我如何自动设置它吗?
    • @Rishi:最接近自动(无需编译自己的 python 版本)的方法是设置 PYTHONUNBUFFERED 环境变量。
    • 杰夫的评论对我很有用。谢谢
    【解决方案2】:

    像在 Python 3.x 中一样导入新的print-as-function

    from __future__ import print_function
    

    (将语句放在脚本/模块的顶部)

    这允许您用自己的替换新的打印功能:

    def print(s, end='\n', file=sys.stdout):
        file.write(s + end)
        file.flush()
    

    这样做的好处是,当你有一天升级到 Python 3.x 时,你的脚本会以同样的方式运行。

    Ps1:我没有尝试过,但 print-as-function 可能只是默认刷新。

    PS2:你可能也对我的progressbar example感兴趣。

    【讨论】:

      【解决方案3】:

      从 Python 3.3 开始,您可以简单地将 flush=True 传递给 print 函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        相关资源
        最近更新 更多