2011-03-29 216 views
29

我尝试在Windows中使用Python脚本运行.bat文件。使用Python代码运行.bat文件

ask.bat文件:

Application.exe work.xml 

我写的Python代码:

import os 
os.system("D:\xxx1\xxx2XMLnew\otr.bat ") 

输出:当尝试运行该文件它只是给出命令提示符的眨眼,而且工作不执行。

注:我尝试用备用斜线还可以,但它不工作。

而且我也想保存文件的输出在另一个文件。

任何人都可以建议如何使脚本可以运行。

+1

您是否尝试转义反斜杠?尝试:'os.system(“D:\\ xxx1 \\ xxx2XMLnew \\ otr.bat”)' – inspectorG4dget 2011-03-29 07:58:49

+0

使用/而不是\如果你不想逃避它 – EgMusic 2017-10-31 14:33:47

回答

23

这已经在SO上详细解答。看看这个线程,它应该回答你所有的问题: Executing a subprocess fails

我使用此代码尝试过自己:

batchtest.py

from subprocess import Popen 
p = Popen("batch.bat", cwd=r"C:\Path\to\batchfolder") 
stdout, stderr = p.communicate() 

batch.bat

echo Hello World! 
pause 

我已经得到了batchtest。 py例子来自前面提到的线程。

+0

嗨das_weezul,谢谢你的信息。在那里提到,但对我来说,同样的问题仍然存在,在执行时,一眨眼的应用程序。即将到来然后出去,没有工作执行 – Silver 2011-03-29 08:32:28

+0

而运行此代码时,我出现了一个错误:“Windows错误2:系统找不到指定的文件”,但文件路径是正确的100%我切换文件夹位置以测试什么你说的代码是从子进程导入Popen p = Popen(“test.bat”,cwd = r“C:\ XMLnew”) stdout,stderr = p.communicate() – Silver 2011-03-29 09:26:52

+3

@Silver:'Popen )'找不到'test.bat'文件。在[docs](http://docs.python.org/library/subprocess.html?highlight=popen#subprocess.Popen)中,它说:“如果* cwd *不是'None',则孩子的当前目录将被更改* cwd *在执行之前注意,当搜索可执行文件时,不考虑这个目录,所以你不能**指定相对于* cwd *的程序路径。 – martineau 2011-03-29 12:00:43

3

如果您尝试调用另一个exe文件bat -file内替换\与/路径

import os 
os.system("D:/xxx1/xxx2XMLnew/otr.bat ") 
+1

我建议使用os.path.normpath 文件路径=“d:/xxx1/xxx2XML/otr.bat” P = Popen(filepath,shell = True,stdout = subprocess.PIPE) stdout,stderr = p.communicate() print process.returncode#0如果成功 – 2012-12-10 15:03:12

16
import subprocess 

filepath="D:/path/to/batch/myBatch.bat" 
p = subprocess.Popen(filepath, shell=True, stdout = subprocess.PIPE) 

stdout, stderr = p.communicate() 
print p.returncode # is 0 if success 
+0

'shell = True'就是允许你运行一个.bat文件而不是.exe。 – 2017-05-05 21:56:11

+0

@ BobStein-VisiBone不,它不是。您可以在不传递shell = True的情况下调用Popen中的.bat文件,但正如martineau在上面的答案中指出的,您必须指定.bat文件的绝对路径。 – Nathan 2017-08-24 15:19:29

0

。 您必须在bat-您正在调用的文件内使用SET Path。 设置的路径应该指向到目录那里exe -file位于:

set PATH=C:\;C:\DOS  {Sets C:\;C:\DOS as the current search path.} 
3
  1. 这是更好地写.bat文件中这样的方式,它的运行不依赖于当前工作目录,即我建议把这种线在.bat文件的开头:.bat文件在双引号

    cd "%~dp0" 
    
  2. 附上文件路径,即:在您的.bat文件

    os.system('"...bat" > outputfilename.txt') 
    

    或者直接:

    os.system('"D:\\x\\so here can be spaces\\otr.bat" ["<arg0>" ["<arg1>" ...]]') 
    
  3. 为了节省一些批处理命令的输出在另一个文件,你可以用通常的redirection syntax,例如

    Application.exe work.xml > outputfilename.txt 
    
1

可能最简单的方法是 - >

import os 
os.chdir("X:\Enter location of .bat file") 
os.startfile("ask.bat") 
+0

不确定其他操作系统,但在Windows上工作:) – 2017-11-23 13:58:40