如何阻止 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 中显示文件中的图像?

如何使 Jupyter Notebook 中的内联图更大? [复制]

如何避免输出到 jupyter notebook 中的可滚动框架?