Python调用Converter.exe报错:缺失output-file参数,如何解决?
问题:Python调用外部Converter.exe时提示缺少
-o参数 在CMD中可正常执行的命令:
cd C:\Program Files (x86)\Tools\Converter Converter.exe -i "C:\Temp\20220902-0001.csv" -o "C:\Temp\20220902-0001.mf4" -f --p-filetype Csv --p-rowsignalnames 1 --p-rowsignalunits 2 --p-rowdatabegin 4 --p-csvseparator Semicolon --p-mastersignalnames Time;
尝试的Python代码:
import subprocess convvers = subprocess.Popen(['Converter.exe', '-i "C:\\Temp\\20220902-0001.csv" -o "C:\\Temp\\20220902-0001.mf4" -f --p-filetype Csv --p-rowsignalnames 1 --p-rowsignalunits 2 --p-rowdatabegin 4 --p-csvseparator Semicolon --p-mastersignalnames Time'], shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, cwd="C:\\Program Files (x86)\\Tools\\Converter")
运行后报错:
ERROR(S): Required option 'o, output-file' is missing.
问题原因
你的subprocess.Popen参数传递方式错误:
当设置shell=True时,若使用列表形式传参,列表的第二个元素会被当成单个完整的命令参数传递给shell,导致Converter.exe无法正确解析。它会把-i "C:\Temp\..." -o "C:\Temp\..." ...整个字符串看作是Converter.exe的第一个参数,自然识别不到独立的-o选项。
修复方案
有两种正确的写法,推荐第二种(更安全):
方案1:保持shell=True,将整个命令作为单个字符串传递
把命令整合成一个字符串,不需要拆分到列表中:
import subprocess cmd = 'Converter.exe -i "C:\\Temp\\20220902-0001.csv" -o "C:\\Temp\\20220902-0001.mf4" -f --p-filetype Csv --p-rowsignalnames 1 --p-rowsignalunits 2 --p-rowdatabegin 4 --p-csvseparator Semicolon --p-mastersignalnames Time' convvers = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, cwd="C:\\Program Files (x86)\\Tools\\Converter")
方案2:关闭shell=True,将每个参数拆分为列表元素(推荐)
这种方式不需要手动加引号,subprocess会自动处理路径中的空格,避免shell注入风险:
import subprocess convvers = subprocess.Popen( [ 'Converter.exe', '-i', 'C:\\Temp\\20220902-0001.csv', '-o', 'C:\\Temp\\20220902-0001.mf4', '-f', '--p-filetype', 'Csv', '--p-rowsignalnames', '1', '--p-rowsignalunits', '2', '--p-rowdatabegin', '4', '--p-csvseparator', 'Semicolon', '--p-mastersignalnames', 'Time' ], stdin=subprocess.PIPE, stdout=subprocess.PIPE, cwd="C:\\Program Files (x86)\\Tools\\Converter" )
内容的提问来源于stack exchange,提问作者Mani
相关产品推荐
相关产品推荐

