stdin에 대해 subprocess.Popen과 함께 StringIO를 활용하려고 하면 다음과 같은 오류가 발생합니다. 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은 cStringIO.StringIO와 subprocess.Popen에 필요한 fileno() 메서드의 비호환성을 강조합니다.
AttributeError: 'cStringIO.StringI' object has no attribute 'fileno'
subprocess.Popen 문서에서는 데이터 전송을 위해 stdin=PIPE를 사용해야 합니다. 표준입력. os.popen() 대체 구문을 권장합니다:
pipe = Popen(cmd, shell=True, bufsize=bufsize, stdin=PIPE).stdin
원본 코드 적용:
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 # ->
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 # ->
위 내용은 stdin을 통해 `subprocess.Popen`에 문자열을 올바르게 전달하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!