Python调用带引号参数的Windows命令行报错[WinError 193]求解
问题分析与解决方案
原命令在Windows cmd.exe中可正常运行:
"E:\Apps\UtilitiesByMarc\inputBox wscript.popup_aaa.vbs" "E:\Zmani\Logging\202212141045__Tmp_7602977475348411.py_.txt" 9 "Backup Report" 65
但使用subprocess.Popen调用时触发错误:
OSError: [WinError 193] %1 is not a valid Win32 application
问题根源
- subprocess默认解析逻辑:Windows下,
subprocess.Popen不指定shell=True时,会直接拆分传入的命令字符串,将第一个空格前的内容当作执行程序。但此处VBS文件路径带空格,即使加了引号,subprocess也不会识别引号规则,会错误地将"E:\Apps\UtilitiesByMarc\inputBox当作程序路径,导致报错。 - VBS执行的隐式逻辑:cmd中直接运行带引号的VBS路径时,系统会自动调用
wscript.exe执行脚本,但subprocess不会自动完成这个映射,必须明确指定执行程序。
正确解决方案
方案1:通过shell=True让cmd解析完整命令
使用Python原始字符串避免反斜杠转义问题,调用时开启shell解析:
cmdlin4popup = r'"E:\Apps\UtilitiesByMarc\inputBox wscript.popup_aaa.vbs" "E:\Zmani\Logging\202212141059__Tmp_2248283756147461.py_.txt" 9 "Backup Report" 65' subprocess.Popen(cmdlin4popup, shell=True)
方案2:明确指定wscript.exe作为执行程序(推荐)
将命令拆分为程序路径和参数列表,无需处理引号,subprocess会自动处理带空格的路径:
import subprocess # wscript.exe通常在系统PATH中,若不在可写完整路径如C:\Windows\System32\wscript.exe wscript_path = "wscript.exe" vbs_script = r"E:\Apps\UtilitiesByMarc\inputBox wscript.popup_aaa.vbs" args = [ wscript_path, vbs_script, r"E:\Zmani\Logging\202212141059__Tmp_2248283756147461.py_.txt", "9", "Backup Report", "65" ] subprocess.Popen(args)
之前尝试的错误点
你之前的几种字符串赋值方式,要么存在Python语法错误(如多字符串未拼接直接并列),要么未解决subprocess对程序路径的解析问题——核心是没明确指定执行VBS的wscript.exe,也未让shell正确解析带空格的路径规则。
内容的提问来源于stack exchange,提问作者Marc B. Hankin
相关产品推荐
相关产品推荐

