Heim >Backend-Entwicklung >Python-Tutorial >Wie übergebe ich Strings über stdin korrekt an „subprocess.Popen'?
Der Versuch, StringIO mit subprocess.Popen für stdin zu verwenden, führt zu einem AttributeError.
import subprocess from cStringIO import StringIO subprocess.Popen(['grep', 'f'], stdout=subprocess.PIPE, stdin=StringIO('one\ntwo\nthree\nfour\nfive\nsix\n')).communicate()[0]
Traceback hebt das hervor Inkompatibilität von cStringIO.StringIO mit der von subprocess.Popen benötigten Methode fileno().
AttributeError: 'cStringIO.StringI' object has no attribute 'fileno'
Die Dokumentation zu subprocess.Popen erfordert die Verwendung von stdin=PIPE für die Datenübertragung an stdin. Die Ersatzsyntax os.popen() wird empfohlen:
pipe = Popen(cmd, shell=True, bufsize=bufsize, stdin=PIPE).stdin
Anpassung des Originalcodes:
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 # ->
Für Python 3.5:
#!/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 # ->
Das obige ist der detaillierte Inhalt vonWie übergebe ich Strings über stdin korrekt an „subprocess.Popen'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!