Python多进程批量启动CMD仅最后一个文件执行问题求助
问题解决:批量启动CMD执行Maya批处理仅最后一个文件生效
核心问题分析
- 命令执行位置错误:
subprocess.run()写在for循环外部,循环过程中每次都会覆盖cmd变量,最终仅执行最后一次循环生成的命令。 - 多进程逻辑冗余:
pool.map(run, range(10))会重复启动10次run函数,而run内部又会遍历所有.ma文件,既造成重复处理,也没利用多进程实现文件的并行处理。
修正后的代码
import os import subprocess from multiprocessing import Pool # 请替换为实际的路径变量 MAYABATCHPATH = "你的mayabatch.exe路径" melFile = "你的mel脚本路径" output_lineEdit = "ma文件所在目录路径" def run(ma_path): cmd = '"{mayaBatchPath}" -batch -file "{maPath}" -script "{melFile}" "{plugins}"'.format( mayaBatchPath=MAYABATCHPATH, melFile=melFile, maPath=ma_path, plugins="-noAutoloadPlugins", ) subprocess.run(cmd, shell=True) def main(): # 先收集所有需要处理的.ma文件完整路径 ma_files = [] for filename in os.listdir(output_lineEdit): if filename.endswith(".ma"): full_path = os.path.join(output_lineEdit, filename) ma_files.append(full_path) # 用进程池并行处理文件,进程数设为2 with Pool(2) as pool: pool.map(run, ma_files) if __name__ == '__main__': main()
关键修改说明
- 调整命令执行时机:让
run函数负责单个文件的命令执行,由进程池分发任务,确保每个文件对应的CMD命令都能被触发。 - 优化多进程调度:先收集所有目标文件路径,再通过进程池并行处理,避免重复遍历和无效的多进程调用。
- 更可靠的文件后缀判断:用
filename.endswith(".ma")替代split,避免文件名含多个点时出错。 - 标准化路径拼接:使用
os.path.join拼接路径,适配不同操作系统的路径规则。
内容的提问来源于stack exchange,提问作者xh c
相关产品推荐
相关产品推荐

