>백엔드 개발 >파이썬 튜토리얼 >Python에서 하위 프로세스 출력을 한 줄씩 스트리밍하려면 어떻게 해야 합니까?

Python에서 하위 프로세스 출력을 한 줄씩 스트리밍하려면 어떻게 해야 합니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-16 06:27:17419검색

How Can I Stream Subprocess Output Line by Line in Python?

subprocess.communicate()에서 스트리밍 출력

Python의 subprocess.communicate() 함수는 프로세스의 stdout을 캡처하는 데 유용합니다. 그러나 일반적으로 모든 출력을 한 번에 반환합니다. 이는 장기간에 걸쳐 출력을 생성하는 프로세스에 불편할 수 있습니다. 이 문제를 해결하기 위해 우리는 스트리밍 방식으로 프로세스 stdout의 각 라인을 인쇄하는 기술을 탐구합니다.

해결책

반복 메커니즘을 사용하여 라인을 검색할 수 있습니다. stdout이 되는 즉시 available:

from subprocess import Popen, PIPE

# Launch a process with buffering set to 1 byte
p = Popen(["cmd", "arg1"], stdout=PIPE, bufsize=1)

# Iterate over the stdout lines as they become available
with p.stdout:
    for line in iter(p.stdout.readline, b''):
        print(line, end='')

# Wait for the process to terminate
p.wait()

설명

  • iter(p.stdout.readline, b''): 이것은 p에서 라인을 지속적으로 읽는 반복자를 생성합니다. .stdout을 비차단 방식으로 실행합니다.
  • end='': 이렇게 하면 각 줄이 인쇄됩니다. 후행 줄 바꿈 문자 없이.
  • p.wait(): 반복자가 소진되면 이 함수는 계속 진행하기 전에 프로세스가 완료될 때까지 기다립니다.

추가 참고 사항

  • Python 2의 경우 문제를 해결하려면 iter()가 필요합니다. 미리 읽기 버그.
  • Python 3의 경우 universal_newlines 옵션은 자동으로 stdout을 텍스트로 디코딩합니다.
  • Pexpect 또는 버퍼링되지 않은 유틸리티와 같은 대체 방법을 사용하여 버퍼링되지 않은 stdout을 강제할 수도 있습니다.

위 내용은 Python에서 하위 프로세스 출력을 한 줄씩 스트리밍하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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