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
相关产品推荐
相关产品推荐

