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?.
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.
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
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"
Placez le chemin du fichier .bat
entre guillemets, à savoir:
os.system('"D:\\x\\so here can be spaces\\otr.bat" ["<arg0>" ["<arg1>" ...]]')
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
Remplacer\avec/dans le chemin
import os
os.system("D:/xxx1/xxx2XMLnew/otr.bat ")
Le moyen le plus simple de le faire est probablement ->
import os
os.chdir("X:\Enter location of .bat file")
os.startfile("ask.bat")
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"
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")
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)
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.}