2011-09-18 130 views
9

我最近切换操作系统,并使用较新的Python(2.7)。在我的旧系统上,我曾经能够瞬间打印。举例来说,假设我有一个计算密集的循环:python实时打印功能

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

那么作为完成每一次迭代的代码,它会打印i

不过,我目前的系统上,蟒蛇似乎缓存标准输出,使该终端是空白几分钟,之后将其打印:

 
1 
2 
3 

在短时间内连续。然后,再过几分钟后,它会打印:

 
4 
5 
6 

等等。我如何在达到print声明时立即打印python?

+0

是啊......那不是Python。 –

回答

8

尝试调用标准输出的冲洗打印

import sys 

... 
sys.stdout.flush() 

后或者使用command line选项-u其中:

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

+0

谢谢!这有效,但你知道我可以自动设置吗? – Rishi

+2

@Rishi:最接近你可以让它自动(而不必求助于编译你自己的版本的Python)将设置'PYTHONUNBUFFERED'环境变量。 –

+0

杰夫的评论对我非常有用。谢谢 – Rishi

1

导入新的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:我没有尝试,但打印功能可能只是在默认情况下刷新。

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

+0

对不起@Rishi,我刚刚看到以前的版本后,确认了我的答案的重写。 – Remi

6

由于Python 3.3,你可以简单地通过flush=True到打印功能。