python打印功能实时

时间:2011-09-18 19:27:03

标签: python printing stdout flush

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

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

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

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

1
2
3

短暂的继承。然后,再过几分钟,打印出来:

4
5
6

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

3 个答案:

答案 0 :(得分:12)

尝试在打印后调用stdout的刷新

import sys

...
sys.stdout.flush()

或使用command line选项-u:

  

强制stdin,stdout和stderr完全没有缓冲。

答案 1 :(得分:12)

从Python 3.3开始,您只需将flush=True传递给打印函数。

答案 2 :(得分: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感兴趣。