Übergabe einer Zeichenfolgeneingabe an Subprocess.Popen über Stdin
Problem:
Übergabe einer Zeichenfolge in das stdin-Argument von subprocess.Popen mithilfe eines cStringIO.StringIO-Objekts einzufügen, führt zu einem Fehler, da dem Objekt das Notwendige fehlt fileno-Attribut.
Lösung:
Um dieses Problem zu beheben, wird empfohlen, den einfacheren Ansatz zu verwenden, der in der Dokumentation zu Popen.communicate() beschrieben ist. Durch Festlegen von stdin=PIPE können Sie eine Pipe für stdin erstellen und die Zeichenfolgeneingabe direkt für die Kommunikationsmethode bereitstellen.
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()) # Output: # -> four # -> five # ->
Zusätzlicher Hinweis:
Für Python 3.5 (3.6 für die Kodierung) vereinfacht subprocess.run den Prozess, indem es Ihnen ermöglicht, String-Eingaben zu übergeben und die Ausgabe als String in einem einzigen Vorgang abzurufen anrufen.
from subprocess import run, PIPE p = run(['grep', 'f'], stdout=PIPE, input='one\ntwo\nthree\nfour\nfive\nsix\n', encoding='ascii') print(p.returncode) # Output: # -> 0 print(p.stdout) # Output: # -> four # -> five # ->
Das obige ist der detaillierte Inhalt vonWie übergebe ich String-Eingaben korrekt an die stdin von „subprocess.Popen'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!