如何在Jupyter Notebook运行结束后执行代码?
Notebook运行结束后执行代码的实现方案
通过单元格级回调结合全局标记实现
虽然IPython的post_run_cell是单元格级回调,但可以通过全局变量追踪是否执行到最后一个单元格:- 在Notebook开头定义全局标记:
is_last_cell = False - 在你设定的最后一个单元格开头标记:
is_last_cell = True - 注册回调,判断标记后执行收尾代码:
from IPython import get_ipython def run_after_final_cell(): if is_last_cell: # 替换为你的收尾代码 print("Notebook所有单元格执行完毕,运行收尾逻辑") ip = get_ipython() ip.events.register('post_run_cell', run_after_final_cell)
- 在Notebook开头定义全局标记:
解析Notebook元数据自动判断最后一个单元格
无需手动标记,通过读取Notebook的.ipynb文件统计代码单元格总数,配合回调计数判断:from IPython import get_ipython import json # 替换为你的Notebook文件名 with open('your_notebook.ipynb', 'r') as f: nb_data = json.load(f) total_code_cells = len([cell for cell in nb_data['cells'] if cell['cell_type'] == 'code']) executed_count = 0 def check_final_cell(): global executed_count executed_count += 1 if executed_count == total_code_cells: # 替换为你的收尾代码 print("所有代码单元格执行完成,触发收尾操作") ip = get_ipython() ip.events.register('post_run_cell', check_final_cell)注意:如果运行中修改Notebook(增删单元格),统计会失效。
用
%run魔法命令串联逻辑
将Notebook作为脚本运行,之后直接执行收尾代码,全程在同一内核:%run your_notebook.ipynb # 此处写收尾代码,会在Notebook所有单元格执行后运行 print("Notebook运行结束,执行收尾任务")
内容的提问来源于stack exchange,提问作者Alonme
相关产品推荐
相关产品推荐

