Python의 하위 프로세스에서 실시간 출력을 동시에 캡처하고 기록하려면 어떻게 해야 합니까?

Linda Hamilton
풀어 주다: 2024-11-25 22:39:10
원래의
534명이 탐색했습니다.

How Can I Simultaneously Capture and Log Live Output from a Subprocess in Python?

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

subprocess.Popen을 활용하여 외부 명령을 실행하는 경우 라이브 출력 스트리밍과 출력을 모두 얻는 것이 어려워집니다. 로깅 및 오류 확인을 위한 저장 공간입니다. 이 문서에서는 출력을 로그 파일에 기록하는 기능을 유지하면서 동시에 실시간으로 캡처하고 표시하는 솔루션을 제공하여 이 문제를 해결하는 기술을 살펴봅니다.

솔루션 1: 반복자 기반 접근 방식

한 가지 방법은 읽기 함수에서 반복자를 생성하고 출력을 표준 출력과 로그 모두에 쓰는 것입니다. 파일:

import subprocess
import sys

with open("log.txt", "wb") as f:
    process = subprocess.Popen(your_command, stdout=subprocess.PIPE)
    for c in iter(lambda: process.stdout.read(1), b""):
        sys.stdout.buffer.write(c)
        f.buffer.write(c)
로그인 후 복사

Python 3에서는 바이너리 쓰기를 지원하려면 "w"를 "wb"로 바꾸세요.

해결책 2: 판독기 및 기록기 파일 접근 방식

또는 판독기 및 기록기 파일을 사용하여 stdout과 파일을 분리할 수 있습니다. 쓰기:

import io
import subprocess
import sys

filename = "log.txt"
with io.open(filename, "wb") as writer, io.open(filename, "rb", 1) as reader:
    process = subprocess.Popen(command, stdout=writer)
    while process.poll() is None:
        sys.stdout.write(reader.read())
        time.sleep(0.5)
    # Read the remaining
    sys.stdout.write(reader.read())
로그인 후 복사

이 방법을 사용하면 데이터가 표준 출력과 로그 파일 모두에 기록되는 동시에 비동기 읽기 및 쓰기의 이점을 얻을 수 있습니다.

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

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