>백엔드 개발 >파이썬 튜토리얼 >`subprocess.Popen`의 stdin에 문자열 입력을 올바르게 전달하는 방법은 무엇입니까?

`subprocess.Popen`의 stdin에 문자열 입력을 올바르게 전달하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-19 06:04:51591검색

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

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.