【发布时间】:2025-11-30 04:15:01
【问题描述】:
不久前,我从 Enthought 的旧 EPD 切换到他们更新的 Canopy 系统。在大多数情况下,它很好,但有一个方面特别令人烦恼。
每当我从 Canopy iPython 环境或命令行运行 python 脚本时,当脚本的那部分被命中时,我的print 语句实际上都不会立即打印出来。相反,多个prints 似乎会在以后一次全部执行。
举个例子……
import numpy as np
print "About to start long computation..."
a = np.random.randn(1e8)
print "Computation finished."
直到之后 a 完成生成后才打印第一条语句,此时两个语句同时打印。 (您可以通过观察 CPU 监视器来判断计算何时发生。)
有人知道这里发生了什么吗?如果相关,我在 Windows 7 机器上运行 Canopy 1.0.0.1160,Python 2.7.3 64bit。
【问题讨论】:
-
如果不清楚,我在旧的环保署从来没有遇到过这个问题。
-
只是为了缩小问题所在:如果你在打印语句之后执行
import sys然后调用sys.stdout.flush(),它会立即出现吗? -
确实如此。这一定是问题所在,但是有没有办法在每个
print之后强制刷新,为什么 Canopy 不会像其他所有 python 发行版那样自动发生这种情况? -
是的,他们肯定设置了默认输出缓冲什么的。 *.com/questions/107705/python-output-buffering 有多种强制刷新选项。
-
我使用的大多数 Python 缓冲区写入
stdout。