Python 实时打印函数

12 投票
3 回答
11542 浏览
提问于 2025-04-17 02:32

我最近换了操作系统,现在用的是更新版的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,这个选项会:

强制标准输入、标准输出和标准错误输出完全不使用缓存。

撰写回答