我最近切换了操作系统并使用了更新的Python(2.7)。在我的旧系统上,我曾经能够即时打印。例如,假设我有一个计算密集的for循环:
for i in range(10):
huge calculation
print i
然后当代码完成每次迭代时,它将打印i
但是,在我当前的系统上,python似乎缓存了stdout,以便终端空白几分钟,然后打印出来:
1 2 3
短暂的继承。然后,再过几分钟,打印出来:
4 5 6
等等。如何在到达print
语句后立即进行python打印?
答案 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感兴趣。