Ich habe eine Batch-Datei, die einen Ordner zippen wie folgt (zip.bat):Wie warten, bis die Batch-Datei beendet wird, wenn sie von Python aufgerufen wird?
for /d %%X in (D:/sample/target/bin) do "c:\Program Files\7-Zip\7z.exe" a -mx "%%X.zip" "%%X\*"
Die Batch-Datei-Ordner ist zip wird und funktioniert einwandfrei. Jetzt ist Aufruf diese Partie aus einem Python-Skript wie folgt:
import subprocess as sp
import sys
start_zip_batch = sp.Popen(['D:/zip.bat'],stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.PIPE, shell = True)
start_zip_batch.wait()
So, jetzt, wenn das Skript gemacht wird ausführen die bin.zip Ordner erstellt, aber halten 0 Bytes im Innern zeigte und nach einer Weile nicht mehr reagiert und ich muss es manuell schließen. Der Behälterordner ist ungefähr 403 MB. Also, bitte schlage vor, wie soll ich zip.bat von Python so nennen, dass es den Zip-Ordner erstellt und dann ordentlich geschlossen wird.
Verwenden 'start_zip_batch.communicate ('), um die' 'stdout' und stderr' Rohre von auffüllt und Blockieren zu verhindern. Aber warum setzen Sie die Ein- und Ausgabe auf Pipes? Wenn Sie keine Standardeingabe und -ausgabe benötigen, können Sie die Standardstreams in Python 3 auf 'subprocess.DEVNULL' oder in Python 2 auf' fnull = öffnen (os.devnull, 'r +') 'setzen. – eryksun