ホームページ >バックエンド開発 >Python チュートリアル >Python でプログラム出力を効果的にキャプチャする方法: 基本的なソリューションを超えて
プログラム出力のキャプチャ: 単純なソリューションを超えて
Python スクリプトでは、さらなる処理のためにプログラム出力をキャプチャすることが一般的なニーズです。素朴な解決策は簡単そうに見えますが、多くの場合、不十分です。標準出力に書き込む次のスクリプトを考えてみましょう:
# writer.py import sys def write(): sys.stdout.write("foobar")
次のコードを使用して出力をキャプチャしようとすると失敗します:
# mymodule.py from writer import write out = write() print(out.upper())
出力を効果的にキャプチャするには、より堅牢なソリューションが必要です。 1 つのアプローチには、システムの stdout ストリームの変更が含まれます。
import sys from cStringIO import StringIO # Redirect stdout to a StringIO object backup = sys.stdout sys.stdout = StringIO() # Perform the write operation write() # Retrieve and restore stdout out = sys.stdout.getvalue() sys.stdout.close() sys.stdout = backup # Process the captured output print(out.upper())
Python 3.4 のコンテキスト マネージャー:
Python 3.4 以降では、よりシンプルで簡潔なソリューションが利用可能です。 contextlib.redirect_stdout コンテキスト マネージャーの使用:
from contextlib import redirect_stdout import io f = io.StringIO() # Redirect stdout to f using the context manager with redirect_stdout(f): help(pow) # Retrieve captured output from f s = f.getvalue()
このエレガントなアプローチにより、出力キャプチャ プロセスが簡素化され、Python スクリプトでの処理が容易になります。
以上がPython でプログラム出力を効果的にキャプチャする方法: 基本的なソリューションを超えての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。