很简单,我有这个代码

 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 answerthis question了解更多详细信息。

关于python - bat文件不在另一个使用Python的文件夹中时运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38400131/

10-12 06:19