如何通过Bash脚本传参并依次运行多个Jupyter Notebook
给Jupyter Notebook传递命令行参数的脚本改造方案
一、Notebook端准备:接收命令行参数
在每个需要接收参数的Notebook开头,添加代码获取传入的参数(以接收2个参数为例):
import sys # 检查参数数量是否符合要求 if len(sys.argv) < 3: print("错误:需要传入至少2个参数") sys.exit(1) # 提取参数 param1 = sys.argv[1] param2 = sys.argv[2] print(f"已接收参数:param1={param1}, param2={param2}")
二、Bash脚本改造:传递参数并批量运行Notebook
修改原脚本,使其支持接收外部参数并传递给每个Notebook:
#!/bin/bash # 定义要运行的6个Notebook列表 notebooks=("notebook1.ipynb" "notebook2.ipynb" "notebook3.ipynb" "notebook4.ipynb" "notebook5.ipynb" "notebook6.ipynb") # 检查脚本是否收到参数 if [ $# -eq 0 ]; then echo "使用方式:./run_notebooks.sh <参数1> <参数2> ..." exit 1 fi # 逐个运行Notebook并传递参数 for nb in "${notebooks[@]}";do echo "开始运行:$nb" # 通过--ExecutePreprocessor.args将参数传递给Notebook jupyter nbconvert --to notebook --execute "$nb" --output "$nb" --ExecutePreprocessor.args="$*" # 检查当前Notebook是否运行成功 if [ $? -ne 0 ]; then echo "$nb 运行失败,终止脚本" exit 1 fi echo "$nb 运行完成" done echo "所有Notebook运行完毕"
关键说明:
$*表示将脚本接收到的所有命令行参数原样传递给Notebook--ExecutePreprocessor.args是jupyter nbconvert的专属参数,用于给要执行的Notebook传递命令行参数- 脚本添加了参数检查和运行结果判断,避免无参数运行或单个Notebook失败后继续执行
使用方式
- 保存改造后的脚本为
run_notebooks.sh - 赋予执行权限:
chmod +x run_notebooks.sh - 运行脚本并传入参数:
./run_notebooks.sh 测试参数1 测试参数2
内容的提问来源于stack exchange,提问作者Wentee
相关产品推荐
相关产品推荐

