Stdin을 통해 Subprocess.Popen에 문자열 입력 전달
문제:
문자열 전달 cStringIO.StringIO 객체를 사용하여 subprocess.Popen의 stdin 인수에 추가하면 개체에 필요한 fileno 속성이 부족하기 때문에 오류가 발생했습니다.
해결 방법:
이 문제를 해결하려면 Popen에 설명된 보다 간단한 접근 방식을 사용하는 것이 좋습니다. 의사소통() 문서. 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()) # Output: # -> four # -> five # ->
추가 참고:
Python의 경우 3.5(인코딩의 경우 3.6), subprocess.run은 문자열 입력을 전달하고 출력을 단일 문자열로 검색할 수 있도록 하여 프로세스를 단순화합니다. 전화하세요.
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 # ->
위 내용은 `subprocess.Popen`의 stdin에 문자열 입력을 올바르게 전달하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!