使用python代码运行.bat文件

Sil*_*ver 46 python batch-file

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

ask.bat 文件:

Application.exe work.xml
Run Code Online (Sandbox Code Playgroud)

我写Python代码:

import os
os.system("D:\xxx1\xxx2XMLnew\otr.bat ")
Run Code Online (Sandbox Code Playgroud)

输出:当尝试运行文件时,它只是眨眼命令提示符,并且工作没有执行.

注意:我也尝试使用备用斜杠,但它不起作用.

我还想将文件的输出保存在另一个文件中.

任何人都可以建议我如何让脚本运行.

das*_*zul 34

这已经在SO上得到了详细的回答.看看这个帖子,它应该回答你所有的问题:执行子进程 失败

我自己用这段代码尝试过:

batchtest.py

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

batch.bat

echo Hello World!
pause
Run Code Online (Sandbox Code Playgroud)

我从前面提到的线程获得了batchtest.py示例.

  • @Silver:`Popen()`找不到`test.bat`文件.在[docs](http://docs.python.org/library/subprocess.html?highlight=popen#subprocess.Popen)中,它显示"如果*cwd*不是`None`,则子项的当前目录将被更改to*cwd*在执行之前.请注意,在搜索可执行文件时不考虑此目录,因此您不能**指定程序相对于*cwd*的路径." (3认同)

小智 25

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
Run Code Online (Sandbox Code Playgroud)

  • `shell=True` 允许您运行 .bat 文件而不是 .exe。 (2认同)

小智 6

在路径中将\替换为\

import os
os.system("D:/xxx1/xxx2XMLnew/otr.bat ")
Run Code Online (Sandbox Code Playgroud)

  • 我建议使用os.path.normpath filepath =“ D:/xxx1/xxx2XML/otr.bat” p = Popen(filepath,shell = True,stdout = subprocess.PIPE)stdout,stderr = p.communicate()打印过程。如果成功,则返回码为0 (2认同)

小智 6

也许最简单的方法是 ->

import os
os.chdir("X:\Enter location of .bat file")
os.startfile("ask.bat")
Run Code Online (Sandbox Code Playgroud)


tav*_*tav 5

  1. 最好以.bat这样的方式编写文件,使其运行不依赖于当前工作目录,即我建议将此行放在.bat文件的开头:

    cd "%~dp0"
    
    Run Code Online (Sandbox Code Playgroud)
  2. .bat用双引号将文件的文件路径括起来,即:

    os.system('"D:\\x\\so here can be spaces\\otr.bat" ["<arg0>" ["<arg1>" ...]]')
    
    Run Code Online (Sandbox Code Playgroud)
  3. 要将某些批处理命令的输出保存在另一个文件中,您可以使用通常的重定向语法,例如:

    os.system('"...bat" > outputfilename.txt')
    
    Run Code Online (Sandbox Code Playgroud)

    或直接在您的.bat文件中:

    Application.exe work.xml > outputfilename.txt
    
    Run Code Online (Sandbox Code Playgroud)