>백엔드 개발 >파이썬 튜토리얼 >Python의 하위 프로세스에서 비차단 출력을 어떻게 캡처할 수 있습니까?

Python의 하위 프로세스에서 비차단 출력을 어떻게 캡처할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-02 13:18:38779검색

How Can I Capture Non-Blocking Output from Subprocesses in Python?

하위 프로세스의 비차단 출력 캡처 이해

Python에서 subprocess 모듈은 시스템 명령과 상호 작용하는 강력한 방법을 제공합니다. 그러나 상당한 양의 출력을 생성하는 시끄러운 명령을 처리할 때 이 출력을 효율적으로 캡처하여 한 줄씩 표시하는 것이 어려울 수 있습니다.

일반적인 접근 방식 중 하나는 proc.stdout에서 for 줄을 사용하는 것입니다. 하위 프로세스의 출력을 읽는 반복자입니다. 그러나 질문에서 강조된 것처럼 이 접근 방식은 버퍼링으로 이어져 출력 표시가 지연될 수 있습니다.

비차단 출력을 위해 readline() 활용

이 버퍼링 문제를 극복하려면 해결책은 proc.stdout 객체의 readline() 메서드를 활용하는 것입니다. 이 방법을 사용하면 하위 프로세스의 출력이 사용 가능해지면 한 줄씩 읽을 수 있습니다. 다음은 readline() 접근 방식을 통합한 업데이트된 코드 조각입니다.

import subprocess

proc = subprocess.Popen(['python', 'fake_utility.py'], stdout=subprocess.PIPE)
while True:
    line = proc.stdout.readline()
    if not line:
        break
    # Perform filtering or other operations on the line as needed
    print("test:", line.rstrip())

이 수정된 스크립트에서는 readline()을 사용하여 하위 프로세스의 stdout을 반복적으로 읽는 연속 루프를 입력합니다. 사용 가능한 출력이 있는 한 루프는 계속 진행되어 수신된 각 줄을 인쇄합니다. 이렇게 하면 출력이 차단되지 않는 방식으로 표시되어 사용자에게 실시간 업데이트를 제공할 수 있습니다.

하위 프로세스 버퍼링 처리

솔루션이 여전히 잠재력을 발휘할 여지가 있다는 점에 유의하는 것이 중요합니다. 하위 프로세스의 구성에 따른 버퍼링 문제. 예를 들어 하위 프로세스의 출력이 과도하게 버퍼링된 경우 약간의 지연이 불가피할 수 있습니다. 이 문제를 해결하려면 하위 프로세스의 버퍼링 설정을 조정하거나 출력 버퍼를 수동으로 플러시하는 등의 추가 전략을 사용해야 할 수도 있습니다.

위 내용은 Python의 하위 프로세스에서 비차단 출력을 어떻게 캡처할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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