我正在使用另一个(父)笔记本中的%run
magic来运行IPython笔记本。
如果使用%run
调用子笔记本,我希望隐藏子笔记本中的一些输出,并且我认为可以通过测试if __name__ == '__main__'
来实现这一点
IPython文档指出,当使用%run -n
开关时:__name__
没有被设置为__main__
,而是被设置为运行文件的名称,没有扩展名(就像python在import中所做的那样)。这允许运行脚本并重新加载其中的定义,而无需调用受if __name__ == "__main__"
子句保护的代码。
然而,这似乎对我不起作用。我试了一下:
在sub_notebook.ipynb
中:
print(__name__)
在parent_notebook.ipynb
中:
%run -n sub_notebook.ipynb
这将打印__main__
,但文档中说它应该打印sub_notebook
。
请您告诉我如何根据代码是单独运行还是使用%run
来选择性地运行sub_notebook.ipynb
中的代码?
我正在运行IPython版本6.1.0
2条答案
按热度按时间gmxoilav1#
%run的源代码设置了
__file__
变量,因此我们可以对此进行测试。我们可以在
sub_notebook.ipynb
中写入:单独运行,将打印
I am not in an imported notebook
我们可以创建一个父笔记本
parent_notebook.ipynb
,其中包含:正确运行此命令将打印
I am in an imported notebook
。我们可以在
sub_notebook.ipynb
中编写一个简单的测试:然后可以保护不应在父笔记本中打印的代码:
qxgroojn2#
在子笔记本
sub_notebook.ipynb
的开头:run_all_examples_display_all_outputs = '__file__' not in locals()
同样在子笔记本中,每当您有一些东西只想在运行子笔记本时运行,而不想在“导入”子笔记本时运行:
if run_all_examples_display_all_outputs: plt.show()