为什么Python subprocess.check_调用无法启动abc(1).bat?(文件名中的括号)
我在Windows7x64上遇到了Python 2.7.6的问题。请帮我查一下 我有abc.py为什么Python subprocess.check_调用无法启动abc(1).bat?(文件名中的括号),python,windows,cmd,subprocess,Python,Windows,Cmd,Subprocess,我在Windows7x64上遇到了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 pro
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
“abc”未被识别为内部或外部命令,
可操作的程序或批处理文件。
回溯(最近一次呼叫最后一次):
文件“C:\test\abc.py”,第3行,在
子流程检查调用('abc(1.bat'))
文件“C:\Python27\lib\subprocess.py”,第540行,在check\u调用中
引发被调用的进程错误(retcode,cmd)
subprocess.CalledProcessError:命令“abc(1).bat”返回非零退出状态1
如果在.bat文件名中不使用括号,则不会出现此问题。有人能解释一下吗?这是因为即使在命令行中,运行
abc(1).bat
也会返回一个错误。它需要以abc(1.bat)的形式运行。如果将Python代码修复为
subprocess.check_call('"abc(1).bat"')
这一切都很好
这是因为即使在命令行中运行
abc(1).bat
也会返回错误。它需要以abc(1.bat)的形式运行。如果将Python代码修复为
subprocess.check_call('"abc(1).bat"')
这一切都很好
原因在a.中说明,如果您还创建了一个名为abc.bat的文件,该文件回显一些测试字符串,该怎么办?有人打电话给你吗?是的。将其命名为abc.bat而不是abc(1)。bat按预期工作。您误解了我:我的意思是使用您拥有的代码,但是abc.bat也存在。查看尝试启动abc(1.bat)时是否会错误地调用abc.bat。这现在主要是一种好奇,因为我想@sukritkalla的答案将有助于解决这个问题。如果您还制作了一个名为
abc.bat
的文件,它回显一些测试字符串,会怎么样?有人打电话给你吗?是的。将其命名为abc.bat而不是abc(1)。bat按预期工作。您误解了我:我的意思是使用您拥有的代码,但是abc.bat也存在。查看尝试启动abc(1.bat)时是否会错误地调用abc.bat。这现在主要是一种好奇,因为我想@Sukritkalla的答案将有助于解决这个问题。哇,真是个大难题。但微软KB217127并没有告诉我们,当括号出现在.bat文件名中时,括号保留了什么语义。据我所知,它们用于循环等。因此,如果没有字符串,CMD会混淆文件名中的parantesse或是一些构造。谢谢。我意识到用双引号括住我的.bat名称是一种很好的做法,因为它还可以处理文件名中的空格问题。@JimmChen:check\u call(['abc(1.bat'))有效吗?(注意:没有双引号,并且使用了list参数)。哇,真是个大难题。但微软KB217127并没有告诉我们,当括号出现在.bat文件名中时,括号保留了什么语义。据我所知,它们用于循环等。因此,如果没有字符串,CMD会混淆文件名中的parantesse或是一些构造。谢谢。我意识到用双引号括住我的.bat名称是一种很好的做法,因为它还可以处理文件名中的空格问题。@JimmChen:check\u call(['abc(1.bat'))有效吗?(注意:没有双引号,并且使用了list参数)。