如何编写shell脚本批量执行子文件夹内的Python程序
错误原因
原脚本存在两个核心问题导致执行失败:
- 第一次循环进入
Data/data1目录后,后续循环的路径Data/*是基于当前已切换的data1目录计算的相对路径,找不到目标子文件夹,cd命令执行失败,自然无法运行对应Python脚本 - 直接执行
python *.py不会依次运行目录下的所有py文件,只会将第一个py文件作为执行入口,剩余py文件会被当成入参传递给第一个脚本,不会单独执行
解决方案
方案1:切换目录执行(适配有相对路径依赖的Python脚本)
如果你的Python脚本依赖当前运行目录的相对路径读取资源,可以用这个方案,每次执行完切回初始目录:
# 遍历Data下的所有子文件夹,末尾加/确保只匹配目录 for dir in Data/*/ do cd "$dir" # 遍历当前目录下所有py文件依次执行 for py_file in *.py do python "$py_file" done # 退回两级目录回到脚本初始执行位置 cd ../../ done
方案2:直接指定完整路径执行(写法更简洁,不易出错)
如果你的Python脚本不依赖运行目录的相对路径,直接通过完整路径执行即可,不需要切换目录:
# 直接匹配所有子文件夹下的py文件依次执行 for py_file in Data/*/*.py do python "$py_file" done
补充说明
- 所有变量建议用双引号包裹,避免路径存在空格时执行报错
- 如果你使用的是Python3环境,将命令中的
python替换为python3即可 - 可先在执行python的命令前加
echo打印要执行的指令,确认执行顺序符合预期后再去掉echo正式运行
内容的提问来源于stack exchange,提问作者manas
相关产品推荐
相关产品推荐

