Запустите файл .bat, используя код Python - PullRequest
41 голосов
/ 29 марта 2011

Я пытаюсь запустить файл .bat в Windows, используя скрипт Python.

ask.bat файл:

Application.exe work.xml

Я пишу код Python:

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

Вывод: при попытке запустить файл просто мигает командная строка, и работа не выполняется.

Примечание. Я также пытаюсь использовать альтернативную косую черту, но она не работает.

И я также хочу сохранить вывод файла в другом файле.

Может кто-нибудь подсказать, как сделать скрипт работоспособным.

Ответы [ 9 ]

33 голосов
/ 29 марта 2011

На это уже подробно отвечали на SO. Проверьте эту ветку, она должна ответить на все ваши вопросы: Сбой при выполнении подпроцесса

Я пробовал сам с этим кодом:

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 из вышеупомянутой темы.

24 голосов
/ 10 декабря 2012
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
4 голосов
/ 09 марта 2016
  1. Файл .bat лучше записать таким образом, чтобы его запуск не зависел от текущего рабочего каталога, т.е. я рекомендую ставить эту строку в начале файла .bat:

    cd "%~dp0"
    
  2. Заключить путь к файлу .bat в двойные кавычки, например:

    os.system('"D:\\x\\so here can be spaces\\otr.bat" ["<arg0>" ["<arg1>" ...]]')
    
  3. Для сохранения вывода одной пакетной команды в другойфайл, который вы можете использовать обычный синтаксис перенаправления , например:

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

    или непосредственно в файле .bat:

    Application.exe work.xml > outputfilename.txt
    
4 голосов
/ 06 января 2012

Заменить \ на / в пути

import os
os.system("D:/xxx1/xxx2XMLnew/otr.bat ")
3 голосов
/ 23 ноября 2017

Вероятно, самый простой способ сделать это ->

import os
os.chdir("X:\Enter location of .bat file")
os.startfile("ask.bat")
1 голос
/ 07 мая 2018

python_test.py

import subprocess
a = subprocess.check_output("batch_1.bat")
print a

Это дает вывод из пакетного файла для печати на Python IDLE / работающей консоли. Таким образом, в пакетном файле вы можете повторить результат на каждом шаге для устранения проблемы. Это также полезно в автоматизации, когда в пакетном вызове происходит ошибка, чтобы легко понять и найти ошибку (вставьте «echo off» в начало пакетного файла, чтобы избежать печати всего)

batch_1.bat

echo off    
echo "Hello World" 
md newdir 
echo "made new directory"
0 голосов
/ 07 ноября 2018

Так что я делаю в Windows 10 и Python 3.7.1 (проверено):

import subprocess
Quellpfad = r"C:\Users\MeMySelfAndI\Desktop"
Quelldatei = r"\a.bat"
Quelle = Quellpfad + Quelldatei
print(Quelle)
subprocess.call(Quelle)
0 голосов
/ 18 сентября 2018

Вам просто не хватает, чтобы сделать это сырым. Проблема с "\". Добавление r до пути сделает работу:)

import os
os.system(r"D:\xxx1\xxx2XMLnew\otr.bat")
0 голосов
/ 17 июня 2013

Если вы пытаетесь вызвать другой файл exe внутри bat -файла. Вы должны использовать SET Path внутри bat -файла, который вы вызываете. set Path должен указывать на каталог там, где находится файл exe:

set PATH=C:\;C:\DOS     {Sets C:\;C:\DOS as the current search path.} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...