stdout에 로그하는 라이브러리를 사용할 때 출력을 캡처하면 동작에 대한 통찰력을 얻을 수 있습니다. 이 문서에서는 Python에서 임의 함수 호출에 대한 stdout 캡처를 달성하기 위한 해결 방법을 살펴봅니다.
특정 코드 블록 내에서 stdout 출력을 캡처하려면 다음과 같은 컨텍스트 관리자를 활용하는 것이 좋습니다.
<code class="python">from io import StringIO import sys class Capturing(list): def __enter__(self): self._stdout = sys.stdout sys.stdout = self._stringio = StringIO() return self def __exit__(self, *args): self.extend(self._stringio.getvalue().splitlines()) del self._stringio # free up some memory sys.stdout = self._stdout</code>
이 컨텍스트 관리자를 사용하려면 함수 호출을 래핑하면 됩니다.
<code class="python">with Capturing() as output: do_something(my_object)</code>
이제 출력 변수에는 함수 호출로 인쇄된 줄 목록이 포함됩니다.
컨텍스트 관리자는 여러 번 사용할 수 있으며 결과는 연결됩니다. 예를 들어:
<code class="python">with Capturing() as output: print('hello world') print('displays on screen') with Capturing(output) as output: # note the constructor argument print('hello world2') print('done') print('output:', output)</code>
다음과 같은 출력이 생성됩니다.
displays on screen done output: ['hello world', 'hello world2']
Python 3.4 이상에서 contextlib.redirect_stdout()은 stdout을 리디렉션하는 대체 접근 방식을 제공합니다. 그러나 캡처 컨텍스트 관리자는 목록이자 컨텍스트 관리자라는 장점을 모두 제공합니다.
위 내용은 Python 함수 호출에 대한 stdout 출력을 캡처하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!