web-dev-qa-db-fra.com

Exécuter un fichier .bat en utilisant le code python

J'essaie d'exécuter un fichier .bat dans Windows à l'aide d'un script Python.

ask.bat fichier:

Application.exe work.xml

J'écris du code Python:

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

Résultat: lorsque vous essayez d’exécuter le fichier, il suffit de lancer un clignotement de la commande Invite et le travail ne s’effectue pas.

Remarque: j'essaie également avec une barre oblique alternative, mais cela ne fonctionne pas.

Et je veux aussi enregistrer la sortie du fichier dans un autre fichier.

Quelqu'un peut-il suggérer comment puis-je rendre le script exécutable?.

36
Silver

Cela a déjà été répondu en détail sur SO. Découvrez ce fil, il devrait répondre à toutes vos questions: L'exécution d'un sous-processus échoue

J'ai essayé moi-même avec ce code:

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

J'ai l'exemple batchtest.py du fil mentionné ci-dessus.

29
das_weezul
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
22
user1176501
  1. Il est préférable d'écrire le fichier .bat de telle manière que son exécution ne dépende pas du répertoire de travail en cours, c'est-à-dire que je recommande de mettre cette ligne au début du fichier .bat:

    cd "%~dp0"
    
  2. Placez le chemin du fichier .bat entre guillemets, à savoir:

    os.system('"D:\\x\\so here can be spaces\\otr.bat" ["<arg0>" ["<arg1>" ...]]')
    
  3. Pour enregistrer la sortie d'une commande batch dans un autre fichier, vous pouvez utiliser la syntaxe habituelle redirection , par exemple:

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

    Ou directement dans votre fichier .bat:

    Application.exe work.xml > outputfilename.txt
    
4
tav

Remplacer\avec/dans le chemin 

import os
os.system("D:/xxx1/xxx2XMLnew/otr.bat ")
4
raghuram

Le moyen le plus simple de le faire est probablement ->

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

python_test.py  

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

Cela donne la sortie du fichier de commandes à imprimer sur la console IDLE/en cours d'exécution de python. Ainsi, dans un fichier de commandes, vous pouvez répercuter le résultat à chaque étape pour résoudre le problème. Ceci est également utile dans l’automatisation lorsqu’une erreur se produit dans l’appel du lot pour comprendre et localiser facilement l’erreur.

batch_1.bat

echo off    
echo "Hello World" 
md newdir 
echo "made new directory"
1
Neo

Il vous manque juste pour le rendre brut. Le problème est avec "\". Ajouter r avant le chemin ferait le travail :)

import os
os.system(r"D:\xxx1\xxx2XMLnew\otr.bat")
0
Prayson W. Daniel

Je fais donc dans Windows 10 et Python 3.7.1 (testé):

import subprocess
Quellpfad = r"C:\Users\MeMySelfAndI\Desktop"
Quelldatei = r"\a.bat"
Quelle = Quellpfad + Quelldatei
print(Quelle)
subprocess.call(Quelle)
0
merlinuwe

Si vous essayez d'appeler un autre fichier exe à l'intérieur du bat- fichier ., Vous devez utiliser SET Path dans le fichier bat- que vous appelez . Set path doit pointer dans le répertoire où se trouve le fichier exe-:

set PATH=C:\;C:\DOS     {Sets C:\;C:\DOS as the current search path.} 
0
user2493936