sys.stdout を使用して書き込み操作を実行するスクリプトがあるとします。出力をキャプチャし、その後の処理のために変数に保存する最初の解決策は次のとおりです。
<code class="python"># writer.py import sys def write(): sys.stdout.write("foobar") # mymodule.py from writer import write out = write() print(out.upper())</code>
ただし、このアプローチでは出力をキャプチャできません。
考えられる解決策の 1 つは、次のとおりです。スクリプトは次のようになります。
<code class="python">import sys from cStringIO import StringIO # setup the environment backup = sys.stdout # #### sys.stdout = StringIO() # capture output write() out = sys.stdout.getvalue() # release output # #### sys.stdout.close() # close the stream sys.stdout = backup # restore original stdout print(out.upper()) # post processing</code>
このアプローチでは、バッファーを使用して出力ストリームをキャプチャします。
Python 3.4 以降では、contextlib.redirect_stdout を使用して出力をキャプチャするより簡潔な方法があります。コンテキスト マネージャー:
<code class="python">from contextlib import redirect_stdout import io f = io.StringIO() with redirect_stdout(f): help(pow) s = f.getvalue()</code>
このソリューションはよりシンプルで、バックアップを管理したりストリームを手動で閉じる必要がなくなります。
以上がI/O 操作を使用して Python スクリプトから出力をキャプチャする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。