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.
--os.system (cmd) # Befehl in Subshell ausführen (ähnlich wie sh -c "cmd" in der Befehlszeile) # Status beenden
--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.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)
--stdin: Standardeingabe --stdout: Standardausgabe --stderr: Standardfehlerausgabe --Die folgenden Sonderwerte
--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
--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