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

hd8*_*810 7 python printing progress ipython-notebook

import time

print 1
time.sleep(5)
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

jfs*_*jfs 13

这是一个缓冲问题.sys.stdout.flush()打印后添加,立即查看输出.您也可以使用python -u命令或设置PYTHONUNBUFFEREDenvvar.请参见禁用输出缓冲.

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

$ python your_script.py
Run Code Online (Sandbox Code Playgroud)

$ python your_script.py | cat
Run Code Online (Sandbox Code Playgroud)

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

Q中看到第二个原因:为什么不使用管道(popen())?