プログラム出力のキャプチャ: 素朴なソリューションを超えて
Python スクリプトでは、さらに処理するためにプログラム出力をキャプチャすることが一般的なニーズです。素朴な解決策は簡単そうに見えますが、多くの場合、不十分です。 stdout に書き込む次のスクリプトを考えてみましょう:
# 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 スクリプトでの処理が容易になります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3