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

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

DDD
풀어 주다: 2024-12-03 08:52:09
원래의
371명이 탐색했습니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿