ipython笔记本不会打印,直到整个程序完成

时间:2014-10-13 20:47:24

标签: python printing ipython-notebook progress

import time

print 1
time.sleep(5)

我分别在IPython笔记本和普通脚本中运行了上面的代码。

IPython Notebook中,它不会打印数字' 1'直到time.sleep(5)完成,而在正常的脚本中,它打印出数字' 1'首先进入time.sleep(5)。那会发生什么?

这个例子只是为了说明我的问题:我使用print在我的代码的每个阶段打印出一些文本,这需要很长时间才能完成,这样我就可以知道程序的位置了。我发现这在执行脚本时工作正常,但在IPython Notebook print中经常落后,当整个程序完成时,所有内容都会打印出来。

有没有办法在IPython Notebook中解决这个问题?

1 个答案:

答案 0 :(得分:13)

这是一个缓冲问题。在打印后添加sys.stdout.flush(),以立即查看输出。您也可以使用python -u命令或设置PYTHONUNBUFFERED envvar。请参阅Disable output buffering

如果输出被重定向,则python使用行缓冲(如果它以交互方式运行(在终端中)并阻止缓冲(例如,~4K字节缓冲区)。比较:

$ python your_script.py

$ python your_script.py | cat

在第二种情况下输出延迟。

请参阅Q: Why not just use a pipe (popen())?

中的第二个原因