使用Python subprocess调用含多文件参数的Python命令异常求助
解决subprocess命令参数构建的问题
这个问题我之前也碰到过!核心问题出在你对subprocess参数列表的理解上——每个命令行参数(包括选项和它的对应值)都必须是列表里的独立元素,不能把选项和值打包成一个字符串。
为什么你的代码无法正常工作
你写的'-m opt'和'-o oFile'会被subprocess当成单个参数传递给脚本,实际执行的命令会变成类似:
script.py "-m opt" "-o oFile" -i file1 file2 file3
脚本解析时会把"-m opt"当成一个完整的选项名,而不是-m选项搭配opt参数,这完全不符合预期的参数结构。
正确的参数构建方式
把每个选项和对应的值拆分成列表的独立元素,再添加输入文件即可:
import subprocess inputfileList = "file1,file2,file3" # 每个选项与对应值都单独作为列表元素 cmd = ['script.py', '-m', 'opt', '-o', 'oFile', '-i'] # 拆分输入文件字符串并逐个添加 for file in inputfileList.split(','): cmd.append(file.strip()) # 加strip避免文件名前后的空格干扰 subprocess.call(cmd)
额外小技巧
如果你的输入文件列表本身就是Python列表(比如inputfileList = ['file1', 'file2', 'file3']),可以直接用extend方法简化代码:
cmd.extend(inputfileList)
这样构建出来的参数列表会被subprocess正确解析为你想要的命令:
script.py -m opt -o oFile -i file1 file2 file3
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

