Früher war es üblich, os.system zu verwenden, aber es scheint modern zu sein, Unterprozesse zu verwenden. Referenz: http://stackoverflow.com/questions/4813238/difference-between-subprocess-popen-and-os-system
import subprocess
cmd = 'myprogram myargs'
returncode = subprocess.call(cmd)
Anruf ist für einfache Anrufe ausreichend, aber es scheint besser, Popen für allgemeinere Zwecke zu verwenden. Gemäß den folgenden Referenzen hat Popen den Vorteil, die Befehlsausführung nicht zu blockieren (= mit der nächsten Zeile fortzufahren, ohne auf den Abschluss des Befehls zu warten), und call ist eine Implementierung von Popen mit einem Befehlsblock. Es scheint. Referenz: http://stackoverflow.com/questions/7681715/whats-the-difference-between-subprocess-popen-and-call-how-can-i-use-them
import subprocess
cmd = 'myprogram myargs'
returncode = subprocess.Popen(cmd)
Auf diese Weise können Sie jedoch keine in Windows integrierten Befehle wie dir und echo aufrufen. Wenn ich versuche, es aufzurufen, erhalte ich die Fehlermeldung "Die angegebene Datei wurde nicht gefunden". Referenz: http://stackoverflow.com/questions/19819417/how-to-use-subprocess-in-windows
Die Lösung besteht darin, shell = True hinzuzufügen.
import subprocess
cmd = 'dir .'
returncode = subprocess.Popen(cmd, shell=True)
Wie im obigen Referenzmaterial erwähnt, wird beim Hinzufügen von shell = True unter Windows die Eingabeaufforderung cmd.exe tatsächlich aufgerufen und der Befehl darauf ausgeführt. Wenn diese Option nicht hinzugefügt wird oder shell = False angegeben ist, wird der Aufruf nur ausgeführt, wenn der tatsächliche Dateiname einschließlich der Erweiterung angegeben ist.
Die meisten Leute brauchen es wahrscheinlich nicht, aber wie oben erwähnt, können verschiedene Shell-Befehle, die auf Powershell ausgeführt werden können, nicht aus dem Unterprozess aufgerufen werden, da es sich um die Eingabeaufforderung handelt, die mit shell = True aufgerufen wird.
Recommended Posts