> 백엔드 개발 > 파이썬 튜토리얼 > Python의 하위 프로세스에서 실시간 출력을 얻는 방법은 무엇입니까?

Python의 하위 프로세스에서 실시간 출력을 얻는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-14 16:17:02
원래의
522명이 탐색했습니다.

How to Achieve Real-Time Output from Subprocess in Python?

하위 프로세스를 사용한 실시간 출력

진행 표시기가 있는 래퍼 스크립트를 생성하려고 할 때 래핑된 스크립트의 출력이 문제에 직면했습니다. stdout=PIPE와 함께 subprocess.Popen을 사용했음에도 불구하고 프로그램이 버퍼링되었습니다. 아시다시피 bufsize를 1 또는 0으로 설정하거나 출력 루프를 사용하지 않고도 문제가 해결되었습니다.

해결책: readline 사용

다행히도 우리는 해결 방법을 발견했습니다. stdout 파이프의 readline 방법을 활용합니다. 공격적으로 버퍼링하는 처음 사용했던 for 루프 방법과 달리, readline으로 강화된 while True 루프는 원하는 동작을 나타냅니다.

<br>while True:<br> line = p.stdout. readline()<br> 줄이 아닌 경우: break<br> ...<br>

기본 문제

이 문제는 Python의 알려진 버그에서 발생하며 문제 3907로 추적됩니다. 비정상적인 버퍼링이 잘 안되네요

결론

readline 방법을 활용하면 exec*와 같은 오래되었거나 잠재적으로 안전하지 않은 기술에 의존하지 않고도 하위 프로세스를 통해 시작된 프로그램에서 실시간 출력을 얻을 수 있습니다. . 이 해결 방법은 3.x 이상의 Python 버전에서도 유효하므로 향후 호환성이 보장됩니다.

위 내용은 Python의 하위 프로세스에서 실시간 출력을 얻는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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