이 컨텍스트 관리자를 사용해보십시오.
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
용법:
with Capturing() as output:
do_something(my_object)
output
이제 함수 호출에 의해 인쇄 된 행을 포함하는 목록입니다.
고급 사용법 :
분명하지 않은 것은 이것이 두 번 이상 수행 될 수 있고 결과가 연결된다는 것입니다.
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)
산출:
displays on screen
done
output: ['hello world', 'hello world2']
업데이트 : 그들은 추가 redirect_stdout()
로 contextlib
(와 함께 파이썬 3.4 redirect_stderr()
). 따라서 io.StringIO
유사한 결과를 얻기 위해이를 사용할 수 있습니다 ( Capturing
컨텍스트 관리자이자 목록 인 것이 틀림없이 더 편리합니다).