>  기사  >  백엔드 개발  >  Python 함수 호출에 대한 stdout 출력을 캡처하는 방법은 무엇입니까?

Python 함수 호출에 대한 stdout 출력을 캡처하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-03 13:57:02137검색

How to Capture stdout Output for Python Function Calls?

Python 함수 호출을 위한 Stdout 출력 캡처

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.