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