Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Python subprocess.check_调用无法启动abc(1).bat?(文件名中的括号)_Python_Windows_Cmd_Subprocess - Fatal编程技术网

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

为什么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

我在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 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参数)。