很简单,我有这个代码
bat_execution = subprocess.Popen("Bats/test.bat", shell=True, stdout=subprocess.PIPE)
返回错误
'Bats' is not recognized as an internal or external command, operable program, or batch file
但是,如果我将bat文件移出bats目录,并将其保持在与下面的python代码相同的级别,则它运行良好:
bat_execution = subprocess.Popen("test.bat", shell=True, stdout=subprocess.PIPE)
我正在使用python和windows 7。我不明白为什么路径会导致这个错误。
我的test.bat是简单的:
echo "test success"
最佳答案
cmd.exe
对未引用的输入命令行参数做了一些有趣的事情。详情见本活动:https://blogs.msdn.microsoft.com/twistylittlepassagesallalike/2011/04/23/everyone-quotes-command-line-arguments-the-wrong-way/
在您的例子中,shell正在分解/
处的字符串,将其视为将传递给Bats
的标志的开始。有两种选择:
使用\\
分离路径元素:将"Bats/test.bat"
更改为"Bats\\test.bat"
或r"Bats\test.bat"
。
引用输入字符串以便cmd.exe
正确解析它:将"Bats/test.bat"
更改为'"Bats/test.bat"'
或"\"Bats/test.bat\""
。
感谢@eryksun提供的第二个选项。
还要注意shell=True
是a)在windows上不需要的,b)即使没有参数,您仍然需要正确地引用参数(与unix不同)。如果您感兴趣,请参见the second answer至this question了解更多详细信息。
关于python - bat文件不在另一个使用Python的文件夹中时运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38400131/