Subprocess.communicate()에서 출력 스트리밍
subprocess.communicate()를 사용하여 프로세스에서 출력을 검색할 때, 표준 출력(stdout)이 한 번에 반환될 수 있으므로 출력의 실시간 모니터링이 불가능합니다. 이 문제는 communications() 함수의 차단 특성으로 인해 발생합니다.
이 문제를 해결하려면 stdout의 각 행이 사용 가능해지면 이를 인쇄하는 스트리밍 접근 방식을 채택할 수 있습니다. 이는 반복자를 사용하고 Popen()의 bufsize 매개변수를 조작하여 달성할 수 있습니다.
Python 2:
from subprocess import Popen, PIPE p = Popen(["cmd", "arg1"], stdout=PIPE, bufsize=1) with p.stdout: for line in iter(p.stdout.readline, b''): print(line) p.wait()
Python 3에서 코드는 다음과 같습니다.
from subprocess import Popen, PIPE with Popen(["cmd", "arg1"], stdout=PIPE, bufsize=1, universal_newlines=True) as p: for line in p.stdout: print(line, end='')
bufsize=1 매개변수는 프로세스가 각 라인 후에 출력 버퍼를 플러시하도록 강제하여 각 라인이 즉시 인쇄되도록 합니다. iter()를 사용하면 행을 비동기적으로 읽을 수 있으므로 출력을 스트리밍할 수 있습니다. 프로세스 종료는 wait() 메서드로 처리됩니다.
이 스트리밍 접근 방식을 사용하면 communications() 함수의 동기적 특성을 손상시키지 않고 장기 실행 프로세스의 출력을 실시간으로 모니터링할 수 있습니다.
위 내용은 Python을 사용하여 하위 프로세스 출력을 실시간으로 스트리밍하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!