如何通过.py文件执行.ipynb文件并实现Windows自动调度?
在Python脚本中运行Jupyter Notebook文件的方法
要在单个.py文件中批量运行.ipynb脚本,配合Windows任务计划程序实现自动调度,推荐以下两种实用方法:
方法一:使用官方工具nbconvert(简单直接)
nbconvert是Jupyter官方提供的工具,支持直接执行Notebook代码。
- 先安装依赖:
pip install nbconvert
- 在调度.py文件中,用
subprocess调用命令批量执行:
import subprocess import os # 替换成你的Notebook文件路径列表 notebook_list = [ r"C:\Projects\notebook1.ipynb", r"C:\Projects\notebook2.ipynb" ] for nb_path in notebook_list: if os.path.isfile(nb_path): # 执行Notebook并覆盖原文件(保留执行输出) run_cmd = f"jupyter nbconvert --to notebook --execute {nb_path} --inplace" result = subprocess.run(run_cmd, shell=True) if result.returncode == 0: print(f"✅ {nb_path} 运行成功") else: print(f"❌ {nb_path} 运行失败") else: print(f"⚠️ 文件不存在:{nb_path}")
- 参数说明:
--execute触发代码执行,--inplace让执行结果覆盖原Notebook;若不想修改原文件,可添加--output指定新输出路径。
方法二:使用papermill(灵活支持参数化)
如果需要给Notebook传递动态参数,papermill是更合适的选择,它专门用于批量执行Notebook。
- 安装依赖:
pip install papermill
- 调度.py文件示例:
import papermill as pm import os notebook_list = [ r"C:\Projects\notebook1.ipynb", r"C:\Projects\notebook2.ipynb" ] for nb_path in notebook_list: if os.path.isfile(nb_path): # 指定执行后的输出文件,避免修改原文件 output_nb = nb_path.replace(".ipynb", "_executed.ipynb") try: pm.execute_notebook( input_path=nb_path, output_path=output_nb # 可选:传递参数,比如parameters={"data_path": "C:/data.csv"} ) print(f"✅ {nb_path} 运行成功,输出文件:{output_nb}") except Exception as e: print(f"❌ {nb_path} 运行失败:{str(e)}") else: print(f"⚠️ 文件不存在:{nb_path}")
Windows自动调度设置建议
- 打开「任务计划程序」,点击「创建基本任务」
- 设置触发器(比如每天凌晨2点运行)
- 操作选择「启动程序」:
- 程序或脚本:填写Python的绝对路径(比如
C:\Python310\python.exe) - 添加参数:填写调度.py文件的绝对路径(比如
C:\Projects\run_notebooks.py)
- 程序或脚本:填写Python的绝对路径(比如
- 勾选「不管用户是否登录都要运行」,确保任务能后台执行
- 手动触发任务测试,检查输出日志确认执行状态
内容的提问来源于stack exchange,提问作者Alex Felipe
相关产品推荐
相关产品推荐

