하위 프로세스 명령의 라이브 출력
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!