Python 関数呼び出しからの標準出力のキャプチャ
オブジェクトを変更し、統計を標準出力に出力する Python ライブラリを使用する場合、必要な場合があります。さらに分析するためにこの出力をキャプチャします。ただし、このような情報を返すように関数を直接変更することは、常に実現可能であるとは限りません。
これに対処するには、キャプチャ コンテキスト マネージャーを利用できます。
<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']
このアプローチは、do_something() 関数を直接変更できない場合に stdout 出力をキャプチャする効果的な回避策を提供します。
以上がPython 関数呼び出しから標準出力をキャプチャする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。