如何在Azure ML/Colab批量运行数万行带参数的!python命令?
批量执行Python脚本处理MP4文件的高效方案
针对你在Azure ML Notebook或Google Colab中需要批量执行上万条!python命令的问题,这里提供几种高效的解决方案,完全适配你的需求(处理目录下所有MP4文件,生成对应同名.pkl文件):
方案1:Python循环+subprocess模块(最通用)
Notebook中的!python本质是执行shell命令,用Python的subprocess模块可以在循环中直接调用目标脚本,无需依赖外部命令文本文件,代码如下:
import os import subprocess # 遍历当前目录下所有MP4文件 for filename in os.listdir('.'): if filename.endswith('.mp4'): # 生成对应的pkl文件名 pkl_filename = filename.replace('.mp4', '.pkl') # 构造并执行命令 cmd = ['python', 'ntu_pose_extraction.py', filename, pkl_filename] # 执行命令,如需查看日志可添加capture_output=True参数 subprocess.run(cmd, check=True)
方案2:Shell脚本批量执行(适合大规模任务)
- 先在Notebook中生成shell脚本文件:
import os with open('run_batch.sh', 'w') as f: for filename in os.listdir('.'): if filename.endswith('.mp4'): pkl_filename = filename.replace('.mp4', '.pkl') f.write(f'python ntu_pose_extraction.py {filename} {pkl_filename}\n')
- 赋予脚本执行权限并运行:
!chmod +x run_batch.sh !bash run_batch.sh
如果想并行执行(加快处理速度,需注意资源占用),可以用parallel命令(Colab/Azure ML通常已预装):
!parallel -j 4 < run_batch.sh
-j 4表示同时运行4个进程,可根据环境CPU核心数调整数值。
方案3:直接使用Notebook魔法命令循环
如果偏好使用!魔法命令,可通过get_ipython().system()在Python循环中执行:
import os for filename in os.listdir('.'): if filename.endswith('.mp4'): pkl_filename = filename.replace('.mp4', '.pkl') get_ipython().system(f'python ntu_pose_extraction.py {filename} {pkl_filename}')
前置准备
确保ntu_pose_extraction.py已下载到当前目录,可提前执行:
!wget https://raw.githubusercontent.com/open-mmlab/mmaction2/90fc8440961987b7fe3ee99109e2c633c4e30158/tools/data/skeleton/ntu_pose_extraction.py
内容的提问来源于stack exchange,提问作者taliegemen
相关产品推荐
相关产品推荐

