import time
print 1
time.sleep(5)
我分别在IPython笔记本和普通脚本中运行了上面的代码。
在IPython Notebook
中,它不会打印数字' 1'直到time.sleep(5)
完成,而在正常的脚本中,它打印出数字' 1'首先进入time.sleep(5)
。那会发生什么?
这个例子只是为了说明我的问题:我使用print
在我的代码的每个阶段打印出一些文本,这需要很长时间才能完成,这样我就可以知道程序的位置了。我发现这在执行脚本时工作正常,但在IPython Notebook
print
中经常落后,当整个程序完成时,所有内容都会打印出来。
有没有办法在IPython Notebook
中解决这个问题?
答案 0 :(得分:13)
这是一个缓冲问题。在打印后添加sys.stdout.flush()
,以立即查看输出。您也可以使用python -u
命令或设置PYTHONUNBUFFERED
envvar。请参阅Disable output buffering。
$ python your_script.py
和
$ python your_script.py | cat
在第二种情况下输出延迟。
中的第二个原因