Übergabe von Strings an subprocess.Popen über stdin
Um einen String an subprocess.Popen zu übergeben, ist es wichtig, stdin= anzugeben PIPE im Funktionsaufruf. Dadurch kann das stdin-Attribut des Popen-Objekts ein dateiähnliches Objekt sein, das Daten aus einer Zeichenfolge empfangen kann.
Um dies zu demonstrieren, könnte das folgende Beispiel implementiert werden:
from subprocess import Popen, PIPE, STDOUT p = Popen(['grep', 'f'], stdout=PIPE, stdin=PIPE, stderr=STDOUT) grep_stdout = p.communicate(input=b'one\ntwo\nthree\nfour\nfive\nsix\n')[0] print(grep_stdout.decode()) # -> four # -> five # ->
Durch die Bereitstellung von stdin=PIPE kann die Eingabezeichenfolge über stdin.communicate() an den grep-Prozess übergeben werden, was die Verarbeitung der Eingabedaten und den Abruf der Befehle ermöglicht Ausgabe.
Python 3.5 und spätere Versionen bieten die Funktion subprocess.run, die den Prozess der Übergabe von Zeichenfolgen an externe Befehle und des Abrufens ihrer Ausgaben vereinfacht. Dies lässt sich wie folgt veranschaulichen:
#!/usr/bin/env python3 from subprocess import run, PIPE p = run(['grep', 'f'], stdout=PIPE, input='one\ntwo\nthree\nfour\nfive\nsix\n', encoding='ascii') print(p.returncode) # -> 0 print(p.stdout) # -> four # -> five # ->
Durch die Verwendung von subprocess.run kann die Eingabezeichenfolge direkt als Argument an den Eingabeparameter übergeben werden, was die Datenkommunikation einfacher macht.
Das obige ist der detaillierte Inhalt vonWie übergebe ich Strings an „subprocess.Popen' und „subprocess.run' in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!