Python 实时打印函数
我最近换了操作系统,现在用的是更新版的Python(2.7)。在我旧的系统上,我可以即时打印输出。比如说,我有一个计算量很大的循环:
for i in range(10):
huge calculation
print i
在代码完成每一次循环时,它会打印出 i
的值。
但是在我现在的系统上,Python似乎把输出给缓存了,所以终端会空白好几分钟,之后才会打印出:
1 2 3
接着又过了几分钟,它才会打印出:
4 5 6
依此类推。我该怎么做才能让Python在到达 print
语句时就立即打印出来呢?
3 个回答
4
在你的代码中引入新的 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时,你的脚本依然可以正常工作。
补充说明1:我没有实际测试过,但这个print-as-function可能默认会自动刷新。
补充说明2:你可能还会对我的 进度条示例 感兴趣。
14
从Python 3.3开始,你只需要在打印函数里加上 flush=True 就可以了。
15
试着在打印后调用标准输出的刷新功能。
import sys
...
sys.stdout.flush()
或者可以使用一个命令行选项 -u,这个选项会:
强制标准输入、标准输出和标准错误输出完全不使用缓存。