"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Python에서 프로세스 출력을 실시간으로 스트리밍하는 방법은 무엇입니까?

Python에서 프로세스 출력을 실시간으로 스트리밍하는 방법은 무엇입니까?

2024년 11월 17일에 게시됨
검색:716

How to Stream Process Output in Real-Time in Python?

프로세스 실행 중 연속 출력 표시

Python 스크립트에서는 하위 프로세스를 활용하여 외부 프로그램을 실행하는 경우가 많습니다. 이는 강력한 기능이지만 출력을 검색하기 전에 프로세스가 완료될 때까지 기다리는 것은 실망스러울 수 있습니다. 이 문제를 해결하기 위해 프로세스가 실행되는 동안 프로세스 출력을 지속적으로 스트리밍하는 방법을 살펴보겠습니다.

전통적으로 우리는 프로세스가 완료된 후 프로세스의 전체 출력을 캡처하기 위해 subprocess.communicate()를 사용했습니다. 그러나 이 접근 방식을 사용하려면 출력이 표시되기 전에 프로세스가 완전히 완료되어야 합니다.

연속 출력을 활성화하려면 fd.readline()과 함께 iter 함수를 활용할 수 있습니다. 이를 통해 프로세스의 stdout 스트림을 반복하여 사용 가능한 라인을 캡처할 수 있습니다.

import subprocess

def execute(cmd):
    popen = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True)
    for stdout_line in iter(popen.stdout.readline, ""):
        yield stdout_line 
    popen.stdout.close()
    return_code = popen.wait()
    if return_code:
        raise subprocess.CalledProcessError(return_code, cmd)

이 향상된 버전에서는 stdout의 각 행이 사용 가능해지면 이를 생성합니다. 이를 통해 스크립트는 프로세스에 의해 생성된 출력을 연속적으로 표시할 수 있습니다.

다음은 예시입니다:

for path in execute(["locate", "a"]):
    print(path, end="")

이 접근 방식을 사용하면 "locate" 명령으로 찾은 검색 쿼리 "a"와 일치하는 경로를 지속적으로 표시하여 다음에 대한 실시간 피드백을 제공할 수 있습니다. 프로세스 진행 상황.

이 기술을 사용하면 지속적인 출력 모니터링이 가능해 외부 프로세스를 시작하는 스크립트의 상호 작용성과 사용자 경험이 향상됩니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3