>백엔드 개발 >파이썬 튜토리얼 >Python을 사용하여 하위 프로세스 출력을 실시간으로 스트리밍하려면 어떻게 해야 합니까?

Python을 사용하여 하위 프로세스 출력을 실시간으로 스트리밍하려면 어떻게 해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-15 05:56:09443검색

How Can I Stream Subprocess Output in Real-Time Using Python?

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

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