ホームページ  >  記事  >  バックエンド開発  >  Python 関数呼び出しから標準出力をキャプチャする方法

Python 関数呼び出しから標準出力をキャプチャする方法

Susan Sarandon
Susan Sarandonオリジナル
2024-11-03 13:20:03613ブラウズ

How to Capture Standard Output from Python Function Calls?

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 サイトの他の関連記事を参照してください。

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