3

不久前,我从 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."

当两个语句同时打印时,在after 生成完成之前不会打印第一条语句。a(您可以通过观察 CPU 监视器来判断计算何时发生。)

有谁知道这里发生了什么?如果相关,我在 Windows 7 机器上运行 Canopy 1.0.0.1160 和 Python 2.7.3 64 位。

4

2 回答 2

3

这看起来像缓冲输出。尝试将您的脚本运行为:

python -u yourscript

-u标志关闭缓冲。

(替换python为您的操作系统的 python 可执行文件的名称。)

于 2013-09-10T02:43:14.183 回答
2

不,这不是环保署和 Canopy 之间的变化。虽然我认为可能有一些默认缓冲关闭的 python 发行版,但 EPD 不是其中之一——性能损失可能太严重了(正如 kindall 的评论所提到的。)最好让程序员决定什么时候对用户很重要立即查看控制台输出(通常用于状态更新)。

顺便说一句,Canopy GUI 中的 IPython 就是 IPython QtConsole。如果您依赖控制台 I/O,您可能还需要注意 QtConsole 这个长期存在的问题:

我不认为 Canopy IPython 有一个合理的解决方法,除了“正确”地做,即冲洗。

https://support.enthought.com/entries/22157050-Canopy-Python-prompt-QtConsole-Can-t-run-interactive-OS-shell-commands

于 2013-09-10T18:13:44.450 回答