프로세스 실행 중 연속 출력 표시
Python 스크립트에서는 하위 프로세스를 활용하여 외부 프로그램을 실행하는 경우가 많습니다. 이는 강력한 기능이지만 출력을 검색하기 전에 프로세스가 완료될 때까지 기다리는 것은 실망스러울 수 있습니다. 이 문제를 해결하기 위해 프로세스가 실행되는 동안 프로세스 출력을 지속적으로 스트리밍하는 방법을 살펴보겠습니다.
전통적으로 우리는 프로세스가 완료된 후 프로세스의 전체 출력을 캡처하기 위해 subprocess.communicate()를 사용했습니다. 그러나 이 접근 방식을 사용하려면 출력이 표시되기 전에 프로세스가 완전히 완료되어야 합니다.
연속 출력을 활성화하려면 fd.readline()과 함께 iter 함수를 활용할 수 있습니다. 이를 통해 프로세스의 stdout 스트림을 반복하여 사용 가능한 라인을 캡처할 수 있습니다.
import subprocess
def execute(cmd):
popen = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True)
for stdout_line in iter(popen.stdout.readline, ""):
yield stdout_line
popen.stdout.close()
return_code = popen.wait()
if return_code:
raise subprocess.CalledProcessError(return_code, cmd)
이 향상된 버전에서는 stdout의 각 행이 사용 가능해지면 이를 생성합니다. 이를 통해 스크립트는 프로세스에 의해 생성된 출력을 연속적으로 표시할 수 있습니다.
다음은 예시입니다:
for path in execute(["locate", "a"]):
print(path, end="")
이 접근 방식을 사용하면 "locate" 명령으로 찾은 검색 쿼리 "a"와 일치하는 경로를 지속적으로 표시하여 다음에 대한 실시간 피드백을 제공할 수 있습니다. 프로세스 진행 상황.
이 기술을 사용하면 지속적인 출력 모니터링이 가능해 외부 프로세스를 시작하는 스크립트의 상호 작용성과 사용자 경험이 향상됩니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3