以编程方式执行 Jupyter Notebook 单元格

33

一个Jupyter Notebook单元格能否通过编程方式执行另一个单元格?(即使用Python)

如果可以,是否可以指定要执行的单元格编号?

2个回答

41

有一个名为execute_cells的JavaScript函数(在Github上查看),当给定一个单元格索引列表时,运行这些单元格。

%%javascript
Jupyter.notebook.execute_cells([0]) # 0 to run first cell in notebook etc.

如果需要在特定的 Python 代码单元格中运行它,可以使用 IPython.display 模块中的 Javascript 函数来执行 JavaScript。

from IPython.display import Javascript
Javascript("Jupyter.notebook.execute_cells([2])")

请注意,这将把光标移动到已执行的单元格。如果您希望返回光标位置,您可以获取下一个要执行的单元格的编号(代码改编自此答案):

%%javascript
Jupyter.notebook.execute_cells([0]) # 0 to run first cell in notebook etc.

var output_area = this;
// find my cell element
var cell_element = output_area.element.parents('.cell');
// which cell is it?
var cell_idx = Jupyter.notebook.get_cell_elements().index(cell_element);
Jupyter.notebook.execute_cells([cell_idx+1]) # execute next cell

1
我遇到了一个Python错误:**ModuleNotFoundError: No module named 'Jupyter'**。我该导入哪个模块才能访问'Jupyter'? - RumbleFish
1
抱歉,我忘记说明这是来自笔记本的JavaScript代码,所以您需要使用%%javascript单元格魔术命令将单元格运行为JavaScript。我已经更新了我的答案以反映这一点。 - Louise Davies
1
为什么你需要特别在Python代码单元格中运行它?无论如何,我已经添加了如何在Python代码单元格中运行它。如果你真的不想使用JavaScript,我认为没有简单的解决方案 - 也许你可以使用nbconvert? - Louise Davies
4
有没有办法找到任意单元格的cell_idx - rahul-ahuja
4
看起来这在JupyterLab中行不通。 :( https://github.com/jupyterlab/jupyterlab/issues/5660#issuecomment-514728559 - Att Righ
显示剩余3条评论

4

我想为@Louise Davies的回答做出补充。如果您想要执行一系列单元格,请使用:

from IPython.display import Javascript
Javascript("Jupyter.notebook.execute_cell_range(10,20)") 

在当前执行的单元格运行时间较长时,是否可以执行另一个单元格?Javascript("Jupyter.notebook.execute_cell_range(10,20)") // 运行时间较长 Javascript("Jupyter.notebook.execute_cell_range(2,4)") // 运行另一个单元格 - Ron

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