ホームページ >バックエンド開発 >Python チュートリアル >Python 関数呼び出しの stdout 出力をキャプチャする方法

Python 関数呼び出しの stdout 出力をキャプチャする方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-03 13:57:02179ブラウズ

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() が標準出力をリダイレクトする代替アプローチを提供します。ただし、キャプチャ コンテキスト マネージャーには、リストとコンテキスト マネージャーの両方であるという利点があります。

以上がPython 関数呼び出しの stdout 出力をキャプチャする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。