1 I는 두 개의 작은 파이썬 파일이 = BUFSIZE으로 바꿈에 플러싱되지 첫번째 input
을 사용하여 라인을 판독하여, 다른 광고를 서브 프로세스서브 프로세스 표준 입력 버퍼
a = input()
print('complete')
번째 시도 인쇄
import subprocess
proc = subprocess.Popen('./simp.py',
stdout=subprocess.PIPE,
stdin=subprocess.PIPE,
bufsize=1)
print('writing')
proc.stdin.write(b'hey\n')
print('reading')
proc.stdout.readline()
위 스크립트는 "쓰기"를 인쇄 한 다음 "읽기"를 인쇄하지만 중단됩니다. 처음에는 이것이 표준 버퍼링 문제라고 생각하여 bufsize=1
을 bufsize=0
으로 변경했습니다. 그러면 문제가 해결됩니다. 그러나 문제를 일으키는 것이 표준이라고 보입니다.
bufsize=1
의 경우 쓰기 아래에 proc.stdin.flush()
을 추가하면 프로세스가 계속됩니다. (1) 버퍼링되지 않은 스트림이 느리므로 (2) 모든 곳에서 플러시를 추가하는 것이 오류가 발생하기 쉽기 때문에이 두 가지 접근 방법 모두 서투른 것처럼 보입니다. 왜 위의 write
은 줄 바꿈에 플러시되지 않습니까? 문서에서는 서브 프로세스에 대해 stdin, stdout 및 stderr 스트림을 만들 때 bufsize
이 사용되므로 newline에서 쓰기가 플러시되지 않는 원인이 무엇입니까?
참으로 호기심. 'bufsize = 1'은 파이썬 2.x에서 잘 작동합니다. – tdelaney
그것은 [Python 3의 버그] (http://bugs.python.org/issue21332)입니다. 텍스트 모드의 경우 고정되어 있습니다 (https://hg.python.org/cpython/rev/763d565e5840). [서브 프로세스 라인 버퍼링은 보편적 인 newlines 모드에서만 작동합니다.] (http://bugs.python.org/issue21471) – jfs