首页 > 解决方案 > IPython %run 忽略打印命令

问题描述

我正在使用几个 Jupyter Notebook 在不同模块之间拆分任务。在我的主笔记本中,我调用另一个模块%run another_module.ipynb来加载我的所有数据。但是,它还会绘制和打印我在another_module.ipynb中的所有内容。

我想将绘图保留在another_module.ipynb中以帮助我可视化数据,但我不想在调用时重新打印所有内容run another_module.ipynb。有没有一个选项可以防止打印这个?

谢谢

标签: pythonjupyter-notebook

解决方案


你可以:

  1. 覆盖该print函数并使其成为空操作:
_print_function = print  # create a backup in case you need it later
globals()["print"] = lambda *args, **kwargs: None
  1. 运行带有-i标志的文件。如果没有-i,文件将在新的命名空间中运行,因此您对全局变量的修改将丢失;与-i,文件在当前命名空间中运行。
%run -i another_module.ipynb

如果您使用其他方法来打印日志(例如 , sys.stdout.write()logging,则为它们创建模拟会更加困难。在这种情况下,我建议将stdoutorstderr管道重定向到/dev/null

import os
import sys
sys.stdout = fopen(os.devnull, "w")
%run -i another_module.ipynb

这两种方法都被认为是骇客,只有在您知道后果时才应使用。最好的办法是更改笔记本中的代码,或者添加一个标志来控制日志记录,或者使用一些支持完全关闭日志记录的--verbose日志记录库(例如)。logging


推荐阅读