[PYTHON] Ein Hinweis zum Unterprozess

Dieser Artikel ist alt. In einem anderen Artikel aktualisiert.

Hier. https://qiita.com/HidKamiya/items/e192a55371a2961ca8a4 Wir haben es breiter zusammengefasst und uns auf "subprocess.run ()" und "subprocess.Popen ()" konzentriert, die hier nicht behandelt werden.

Veraltete Befehle

--os.system (cmd) # Befehl in Subshell ausführen (ähnlich wie sh -c "cmd" in der Befehlszeile) # Status beenden

Überblick

--subprocess.call (cmd) # Endstatus Check_call (cmd) # Endstatus aber Ausnahme bei Fehler (CalledProcessError) Check_output (cmd) #Ergebnis aber Ausnahme bei Fehler (CalledProcessError) -.Popen (cmd) # Geben Sie die Datei bei der Eingabe / Ausgabe an

cmd-Inhalt: Liste oder Taple, wenn Argumente verwendet werden

--cmd.strip (). split ("") Vertraute Verarbeitung. Wenn es unvermeidlich einen Raum gibt, teilen Sie ihn. --shlex.split (cmd) Wenn die Zeichenfolge eine Gruppierung wie "" enthält, teilen Sie sie nicht durch das Leerzeichen.

"ls -l" --> ['ls', '-l'] "echo'Hallo Welt! '" -> [' Echo ',' Hallo Welt! '] # Nur Shlex.split (cmd)

Möglichkeit

--stdin: Standardeingabe --stdout: Standardausgabe --stderr: Standardfehlerausgabe --Die folgenden Sonderwerte

Besonderer Wert

--subprocess.DEVNULL: Geben Sie das Standardeingabe- / Ausgabeziel als os.devnull an (Bit-Bucket, Schwarzes Loch). --subprocess.PIPE: Geben Sie die Pipe zum Standard-Eingabe- / Ausgabeziel an --subprocess.STDOUT: Geben Sie an, dass die Standardfehlerausgabe an dasselbe Handle wie die Standardausgabe ausgegeben wird (nur für 2> 1 & .stderr).

Fehler bei der Ausgabeintegration


subprocess.check_output([cmd],stderr=subprocess.STDOUT)

subprocess.Popen.stdin/stdout/stderr

Ausgabe über ein Rohr


subprocess.Popen(cmd, stdout=subprocess.PIPE,shell=True).stdout.readlines()

subprocess.Popen.communicate()

communicate()Erfassung mit


subprocess.Popen([cmd], stdout=subprocess.PIPE).communicate()[0]

communicate()Eingabe mit


subprocess.Popen(['cat'], stdin=subprocess.PIPE, stdout=subprocess.PIPE).communicate('Hello world!\n')[0]

communicate()Eingabe 2 mit


subprocess.Popen(['cat'], stdin=subprocess.PIPE, stdout=subprocess.PIPE).communicate(open('input.txt','r').read())[0]

Beschreibung, die keine Shell in Pipe verwendet


p1 = subprocess.Popen([cmd1], stdout=subprocess.PIPE) #Pipe zum Ausgabeziel
p2 = subprocess.Popen([cmd2], stdin=p1.stdout, stdout=subprocess.PIPE) #Empfange p1 zur Eingabe
p1.stdout.close()
output = p2.communicate()[0] #stdout_Daten bekommen

Andere Optionen und Standardwerte

--bufsize = -1: Eingabe- / Ausgabepuffereinstellung (Zeilenpuffer). --executable = Keine: Geben Sie das auszuführende Ersatzprogramm an. --preexec_fn = Keine: Rufen Sie die Datei unmittelbar vor dem Ausführen des untergeordneten Prozesses auf. #POSIX --close_fds = True: Schließt andere Dateideskriptoren als 0, 1, 2, bevor der untergeordnete Prozess ausgeführt wird. #POSIX --cwd = Keine: Arbeitsverzeichnis --env = Keine: Definieren Sie Umgebungsvariablen im neuen Prozess --universal_newlines = False: Verwenden Sie locale.getpreferredencoding (False) anstelle von locale.getpreferredencoding (). --startupinfo = Keine: STARTUPINFO #Windows an die zugrunde liegende CreateProcess-Funktion übergeben --creationflags = 0: CREATE_NEW_CONSOLE oder CREATE_NEW_PROCESS_GROUP #Windows --restore_signals = True: Speichern Sie alle in SIG_IGN gesetzten Signale in SIG_DFL, bevor der untergeordnete Prozess ausgeführt wird --start_new_session = False: Erstellt den Systemaufruf setsid () im untergeordneten Prozess, bevor der Unterprozess #POSIX ausgeführt wird --pass_fds = (): Dateideskriptor, der zwischen Eltern und Kind offen bleibt --encoding = None: Codierungsname der Standardeingabe- / Ausgabedatei --errors = None: Fehlerbehandlung während der Codierung

Recommended Posts

Ein Hinweis zum Unterprozess
Ein Hinweis zu mprotect (2)
Ein Hinweis zu KornShell (ksh)
Ein Hinweis zur TensorFlow-Einführung
Ein Hinweis zu [Python] __debug__
Hinweis zu get_scorer von sklearn
Ein Hinweis zu Mock (Python-Mock-Bibliothek)
Hinweis zu awk
Nur eine Notiz
Ein Memo, dass ich das Pyramid Tutorial ausprobiert habe
Hinweis zu Zeigern (Go)
Ein Memorandum über Nan.
Schreiben Sie eine Notiz über die Python-Version von Python Virtualenv
Datenanalyse in Python: Ein Hinweis zu line_profiler
Ein Hinweis zur neuen Stilbasisklasse
Modifikatoren zur Überprüfung von Memos mit MaxPlus
Senden Sie ein Signal an den Unterprozess
Ein Memorandum über den Python-Mock
Ein bisschen mehr über FIFO
Eine kleine Notiz, die auf printf folgt
Ein Hinweis zum Aufrufen der Facebook-API mit dem Python SDK
Memo
Eine erfrischende Geschichte über Slice in Python
Notizen, wenn gcloud kaputt ist
Eine launische Geschichte über Slice in Python
Ich habe eine Frage zu Leerzeichen
Memo
Eine kleine Beispielnotiz von list_head
Ein Hinweis zum Verbinden von Spark mit OpenStack Swift-basiertem IBM Object Storage
Eine Notiz, die numpy.array schön druckt
Die Geschichte der Verwendung von Python reduziert
Tiefer über Unterprozess (3 Serien, aktualisierte Version)
[Übersetzung] Ein Memo über strukturierte Parallelverarbeitung. Oder besser gesagt, die go-Anweisung scheint schädlich zu sein
Ein Hinweis zu den Funktionen der Standard-Linux-Bibliothek, die sich mit Zeit befasst
Eine Notiz, in der ein Python-Anfänger stecken blieb
[Hinweis] Lesen Sie eine Datei aus einem anderen Verzeichnis
Eine Geschichte über einen magischen Umbau, der Lubuntu in ein Chromebook bringt
Ich berührte "Orator" und machte mir eine Notiz
Ein Java-Programmierer studierte Python. (Über Typ)
Memorandum zu Djangos QueryDict
Hinweise zum Aktivieren von PostgreSQL mit Django
Eine Geschichte über Python Pop und Append
Memo über Sphinx Teil 1 (Erstellen eines Projekts)
Über den 02. Februar 2020 * Dies ist ein Python-Artikel.
[Anmerkung] Eine Geschichte darüber, dass es nicht möglich ist, den Proxy mit pip zu durchbrechen