You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 12:45:48