Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich mit „subprocess.Popen' mehrere Prozesse in Python effizient verbinden und wann sollte ich Piping vermeiden?
Um komplexe Shell-Befehle auszuführen, die die Weiterleitung mehrerer Prozesse erfordern, bietet das Subprozessmodul von Python Funktionen zum Erstellen und Verwalten von Prozessen. Sehen wir uns an, wie man subprocess.Popen für diesen Zweck verwendet.
Der bereitgestellte Shell-Befehl:
echo "input data" | awk -f script.awk | sort > outfile.txt
leitet die Ausgabe von echo "input weiter data“ in den awk-Prozess, dessen Ausgabe dann an den Sortierprozess weitergeleitet wird. Um dies mit subprocess.Popen zu simulieren:
import subprocess p_awk = subprocess.Popen(["awk","-f","script.awk"], stdin=subprocess.PIPE, stdout=subprocess.PIPE) p_sort = subprocess.Popen(["sort"], stdin=p_awk.stdout, stdout=subprocess.PIPE) stdout_data = p_sort.communicate(b"input data\n")[0]
In diesem Szenario wird der Echo-Befehl durch einen direkten Schreibvorgang in p_awks stdin ersetzt und stdout_data enthält die sortierte Ausgabe.
Obwohl die akzeptierte Lösung das Piping-Ziel erreicht, wird empfohlen, eine reine Python-Lösung in Betracht zu ziehen Ansatz wie unten dargestellt:
import subprocess awk_sort = subprocess.Popen("awk -f script.awk | sort > outfile.txt", stdin=subprocess.PIPE, shell=True) stdout_data = awk_sort.communicate(b"input data\n")[0]
Dieser Ansatz delegiert die Weiterleitung an die Shell und vereinfacht so den Unterprozesscode. Darüber hinaus kann das Umschreiben des awk-Skripts in Python awk als Abhängigkeit beseitigen, was zu schnellerem und unkomplizierterem Code führt.
Das Piping mehrerer Prozesse führt zu Komplexität und potenziellen Engpässen. Durch die Eliminierung von Pipes und die Verwendung von Python für alle Verarbeitungsschritte erhalten Sie die folgenden Vorteile:
Das obige ist der detaillierte Inhalt vonWie kann ich mit „subprocess.Popen' mehrere Prozesse in Python effizient verbinden und wann sollte ich Piping vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!