如何阻止 Jupyter Notebook 中的 stderr 输出?
Posted
技术标签:
【中文标题】如何阻止 Jupyter Notebook 中的 stderr 输出?【英文标题】:How to block stderr output in Jupyter Notebook? 【发布时间】:2020-12-12 06:51:12 【问题描述】:我在 Jupyter Notebook 和我正在使用的库 (PyNN) 中运行 Python 脚本,产生大量标准错误输出,这会减慢代码速度并填满内存。我曾尝试在单元格的开头使用 %%capture,但没有任何改变,并且输出保持不变。
我正在发布输出的快照。
感谢任何提示。谢谢
【问题讨论】:
您是否尝试过参数--no-stderr 与捕获? 除了@edubriguenti 的建议外,试试ipython notebook --quiet
(这会禁用日志记录)。
@edubriguenti 我试过了,但 %%capture 现在对我来说似乎根本不起作用
@AvivYaniv 如果我理解正确,这个应该在笔记本的终端中运行,但我得到 ImportError: No module named notebook.notebookapp
@costisst 好吧试试jupyter notebook notebook.ipynb --log-level=0
【参考方案1】:
如果是打印问题,您可以使用contextlib
重定向流:
import contextlib
import os
devnull = open(os.devnull, 'w')
contextlib.redirect_stderr(devnull)
【讨论】:
我的代码中有超过 1 个脚本,它们实现了不同的类。我在主脚本中尝试了这段代码,这是唯一使用 PyNN 库的代码,但它不起作用。我也尝试在每个脚本中添加它,它也不起作用 额外提示:如果您想临时重定向输出(例如,仅用于一个函数调用),您可以将其用作上下文管理器:with redirect_stdout(open(os.devnull,'w')):
。适用于标准错误和标准输出。
这是否真的关闭了 devnull 句柄 @mad
您可能需要多个处理程序,例如:with open(os.devnull, 'w') as h, redirect_stdout(h):
才能正确关闭上下文。
@Maximilian-Burszley:很好的观察。我不确定这是否是检查处理程序是否已关闭的正确方法,但我使用了psutil.Process().open_files()
,但什么也没看到。我还尝试使用open()
中的实际文件而不是os.devnull
,结果相同。所以在我看来,文件处理程序确实用嵌套的open()
正确关闭。【参考方案2】:
我使用 css 解决方法:
%%html
<style>
div.output_stderr
display: none;
</style>
【讨论】:
以上是关于如何阻止 Jupyter Notebook 中的 stderr 输出?的主要内容,如果未能解决你的问题,请参考以下文章
如何在Jupyter Notebook小部件中使用FabricJS
如何解决 jupyter notebook 中的 pandas 问题?
在jupyter-notebook中的markdown单元格边框 - 如何删除?
如何在 Jupyter Notebook 中显示文件中的图像?