从另一个Jupyter笔记本运行笔记本

54

我想知道是否可以从另一个*.ipynb文件中运行*.ipynb文件并得到返回值。 我知道我们可以这样运行:

%run ./called_notebook.ipynb

被调用的笔记本包含以下内容:

def foo():
    print(1)
    return 2
foo()

但它只打印了“1”,没有给我处理返回值的机会。这是可能的吗?下面这种类型的代码是否存在:

但它只打印了“1”,没有给我处理返回值的机会。这是可能的吗?下面这种类型的代码是否存在:

a = %run ./called_notebook.ipynb

谢谢!


1
我尝试过这个,但命令会在文件末尾附加 '.py'。我正在使用 Jupyter Lab 3.2.4。 - philipkd
2个回答

75

我建议从新笔记本中运行foo函数。换句话说:

%run ./called_notebook.ipynb
foo()

我认为,以下是使用 %run 魔术命令的最佳实践。将你的高级API存储在一个单独的笔记本中(如foo),但保持主笔记本中的函数调用可见。


9
请注意,这个语句甚至可以位于一个if语句内,例如:if need_to_run(): %run ... - Tomasz Gandor
如果那个笔记本在全局范围内定义了一些巨大的对象,每次使用运行命令时,该对象是否会被重新实例化? - duhaime
2
太好了!一个问题/备注...当运行called_notebook时,所有的print/display/etc.命令都会被显示,但是任何正常情况下会被显示的单元格末尾的结果将不会被显示。 - ntg
如何从另一个笔记本运行所有单元格 - Sourav Kannantha B
谢谢!我已经寻找这个很长时间了。快速问题:如何在此脚本中停止其他脚本? - Silviu

0
Matt的答案有效。但是我想要从calling_notebook.ipynb运行另一个called_notebook.ipynb,并将数据框从called_notebook传输到calling_notebook,而不显示任何输出。
我尝试了很多选项都没有成功(标签等)。然而,下面的方法可以实现(抑制了called_notebook.ipynb中的所有输出)。
    # to suppress output of the cell
    %%capture        
    %run -n ./called_notebook.ipynb  
    df = DFF()       # function in called_notebook that returns a dataframe after doing all work
    df.info()  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接