实时的python打印函数

2024-05-12 13:50:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近换了操作系统,正在使用一个更新的Python(2.7)。在我的旧系统中,我曾经可以即时打印。例如,假设我有一个计算密集的For循环:

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

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

但是,在我当前的系统上,python似乎缓存了stdout,使终端在几分钟内保持空白,然后打印:

1
2
3

一个接一个。再过几分钟,它就会打印出:

4
5
6

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


Tags: 代码in终端for系统stdoutrange语句
3条回答

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

导入新的print-as-function,如Python 3.x所示:

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函数在默认情况下可能会刷新。

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

打印后尝试调用stdout刷新

import sys

...
sys.stdout.flush()

或者使用command line选项-u,它:

Force stdin, stdout and stderr to be totally unbuffered.

相关问题 更多 >