Python のスクリプトから stdout 出力をキャプチャする
外部スクリプトを使用する場合、多くの場合、さらなる処理のために stdout 出力をキャプチャすることが必要になります。一般的なアプローチは、write() 関数を使用して出力を出力し、その出力を変数に格納することです。ただし、次のスクリプトに示されているように、このアプローチは常に機能するとは限りません:
<code class="python"># module writer.py import sys def write(): sys.stdout.write("foobar")</code>
write() 関数の出力をキャプチャするために、cStringIO モジュールを含むソリューションが提案されました:
<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 的な方法があります。
contextlib.redirect_stdout (Python 3.4 ) を使用する
このメソッドは contextlib を利用します。 .redirect_stdout コンテキスト マネージャーは、stdout 出力を StringIO オブジェクトに一時的にリダイレクトします。
<code class="python">from contextlib import redirect_stdout import io f = io.StringIO() with redirect_stdout(f): help(pow) s = f.getvalue()</code>
io.StringIO を直接使用する
もう 1 つの方法は、StringIO オブジェクトを直接作成し、標準出力出力を手動でルーティングします:
<code class="python">import io output = io.StringIO() sys.stdout = output write() sys.stdout.seek(0) captured_output = output.read()</code>
これらのメソッドを実装することで、開発者は複雑な回避策に頼ることなく、スクリプト出力を効果的にキャプチャして処理できます。
以上がPython でスクリプトの標準出力出力をキャプチャする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。