为什么Python subprocess.check_call无法启动abc(1).bat? (文件名中的括号)

时间:2014-04-02 15:13:54

标签: python windows cmd subprocess

我在Windows 7 x64上遇到了Python 2.7.6的问题。请帮忙查一下。

我有 abc.py

import subprocess

subprocess.check_call('abc(1).bat')

print 'done'

abc(1).bat 只有一行:

ver

运行abc.py无法启动abc(1).bat,并在CMD控制台上显示错误消息:

'abc' is not recognized as an internal or external command,
operable program or batch file.
Traceback (most recent call last):
  File "C:\test\abc.py", line 3, in <module>
    subprocess.check_call('abc(1).bat')
  File "C:\Python27\lib\subprocess.py", line 540, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command 'abc(1).bat' returned non-zero exit status 1

如果我在.bat文件名中不使用括号,则不会出现此问题。有人可以帮忙解释一下吗?

1 个答案:

答案 0 :(得分:4)

这是因为即使在命令行中,运行abc(1).bat也会返回错误。它需要以"abc(1).bat"运行。如果您将Python代码修复为。

subprocess.check_call('"abc(1).bat"')

这一切都很好。

原因在Microsoft FAQ Question

中说明