Es gibt zwei Möglichkeiten, die Umleitung durchzuführen. Beide gelten entweder für subprocess.Popen
oder subprocess.call
.
Setzen Sie das Schlüsselwortargument shell = True
oder executable = /path/to/the/shell
und geben Sie den Befehl so an, wie Sie ihn dort haben.
Da Sie die Ausgabe nur in eine Datei umleiten, legen Sie das Schlüsselwortargument fest
stdout = an_open_writeable_file_object
wo das Objekt auf die output
Datei zeigt.
subprocess.Popen
ist allgemeiner als subprocess.call
.
Popen
blockiert nicht, sodass Sie mit dem Prozess interagieren können, während er ausgeführt wird, oder mit anderen Dingen in Ihrem Python-Programm fortfahren können. Der Aufruf zum Popen
Zurückgeben eines Popen
Objekts.
call
tut Block. Obwohl es dieselben Argumente wie der Popen
Konstruktor unterstützt, sodass Sie weiterhin die Ausgabe des Prozesses, Umgebungsvariablen usw. festlegen können, wartet Ihr Skript auf den Abschluss des Programms und call
gibt einen Code zurück, der den Beendigungsstatus des Prozesses darstellt.
returncode = call(*args, **kwargs)
ist im Grunde das gleiche wie anrufen
returncode = Popen(*args, **kwargs).wait()
call
ist nur eine Komfortfunktion. Die Implementierung in CPython erfolgt in subprocess.py :
def call(*popenargs, timeout=None, **kwargs):
"""Run command with arguments. Wait for command to complete or
timeout, then return the returncode attribute.
The arguments are the same as for the Popen constructor. Example:
retcode = call(["ls", "-l"])
"""
with Popen(*popenargs, **kwargs) as p:
try:
return p.wait(timeout=timeout)
except:
p.kill()
p.wait()
raise
Wie Sie sehen können, ist es eine dünne Hülle herum Popen
.
call()
scheint sehr klar zu sein. Können Sie ein Angebot oder einen Link angeben, damit wir wissen, worauf wir uns bei einer Antwort konzentrieren müssen?