【问题标题】:ipython notebook is NOT printing until the whole program is finished在整个程序完成之前,ipython notebook 不会打印
【发布时间】:2026-01-08 11:55:02
【问题描述】:
import time

print 1
time.sleep(5)

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

IPython Notebook 中,在time.sleep(5) 完成之前它不会打印数字“1”,而在普通脚本中它会首先打印数字“1”并进入time.sleep(5)。那会发生什么?

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

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

【问题讨论】:

  • 笔记本必须等待代码完成才能看到输出
  • @PadraicCunningham:您无需等待脚本完成即可看到输出。见my answer

标签: python printing ipython-notebook progress


【解决方案1】:

这是一个缓冲问题。在打印后添加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())?

【讨论】:

  • 我在显示 python 脚本 gitlab 部署任务的输出并在每个打印命令解决我的问题后添加 sys.stdout.flush() 时遇到问题。现在输出在脚本执行时打印出来。
最近更新 更多