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

Python使用subprocess调用pytest时自定义CLI参数识别失败

问题解决方法

错误原因

subprocess使用列表形式传递命令参数时,每个列表元素都会被当做独立的参数直接传给目标程序,不会经过shell的空格拆分逻辑。你代码里把--device_id和参数值、--firmware_version和参数值写在同一个字符串里,pytest会将--device_id 9101整体识别为一个未知参数,而非--device_id选项加值9101,因此会报参数缺失错误。

修复方案

将选项名和选项值拆分为独立的列表元素即可,修正后的代码如下:

cmd = [
    "pytest", 
    "-s", 
    debug, 
    "DeviceTests/{0}".format(test_name), 
    # 选项和值分开为两个独立元素
    "--device_id",
    device_address,
    "--firmware_version",
    firmware_version
]
print(cmd)
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = process.communicate()
print(out)

补充说明

如果希望保持类似os.system的字符串传参写法,可给subprocess.Popen添加shell=True参数,但该写法存在命令注入风险,且跨平台兼容性较差,不推荐使用:

# 不推荐写法,仅做参考
cmd = f"pytest -s {debug} DeviceTests/{test_name} --device_id {device_address} --firmware_version {firmware_version}"
process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:36:00