>백엔드 개발 >파이썬 튜토리얼 >Python의 하위 프로세스 명령에서 실시간 출력을 얻으려면 어떻게 해야 합니까?

Python의 하위 프로세스 명령에서 실시간 출력을 얻으려면 어떻게 해야 합니까?

DDD
DDD원래의
2024-12-03 08:52:09387검색

How Can I Get Live Output from a Subprocess Command in Python?

하위 프로세스 명령의 라이브 출력

Python에서는 다음을 사용하여 하위 프로세스 명령의 출력을 캡처하고 동시에 라이브 스트리밍 출력을 생성할 수 있습니다. 다음 접근 방식:

사용 Iterator

import subprocess
import sys

p = subprocess.Popen(['command'], stdout=subprocess.PIPE)
for line in iter(lambda: p.stdout.readline(1), ''):
    sys.stdout.buffer.write(line)

FileWriter 및 FileReader 사용

import io
import time
import subprocess
import sys

log = 'test.log'
with io.open(log, 'wb') as writer, io.open(log, 'rb', 1) as reader:
    p = subprocess.Popen(['command'], stdout=writer)
    while p.poll() is None:
        sys.stdout.write(reader.read())
        time.sleep(0.5)
    # Read the remaining
    sys.stdout.write(reader.read())

원본 코드 리팩토링

원본 코드를 사용하면 다음과 같이 하위 프로세스를 생성한 후 실시간 출력을 캡처할 수 있습니다. 다음:

ret_val = subprocess.Popen(run_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True )
while not ret_val.poll():
    log_file.flush()
    for line in iter(lambda: ret_val.stdout.readline(1), ''):
        if line:
            print(line)
            log_file.write(line.decode())

이 방법을 사용하면 stdout 및 stderr 스트림을 모두 캡처하고 실시간 출력을 인쇄하는 동시에 로그 파일에 쓸 수 있습니다.

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

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