IPython%run忽略打印命令

时间:2020-03-31 19:15:38

标签: python jupyter-notebook

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

我想将图保留在 another_module.ipynb 中,以帮助我可视化数据,但我不想在调用run another_module.ipynb时重印所有内容。是否有防止这种伪装的选项?

谢谢

1 个答案:

答案 0 :(得分:0)

您可以:

  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),则很难为它们创建模拟。在这种情况下,我建议将stdoutstderr管道重定向到/dev/null

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

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