Heim > Backend-Entwicklung > Python-Tutorial > Wie übergebe ich String-Eingaben korrekt an die stdin von „subprocess.Popen'?

Wie übergebe ich String-Eingaben korrekt an die stdin von „subprocess.Popen'?

Mary-Kate Olsen
Freigeben: 2024-12-19 06:04:51
Original
588 Leute haben es durchsucht

How to Correctly Pass String Input to `subprocess.Popen`'s stdin?

Ü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
# ->
Nach dem Login kopieren

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
# -> 
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage