ホームページ  >  記事  >  バックエンド開発  >  Python でスクリプトの標準出力出力をキャプチャする方法

Python でスクリプトの標準出力出力をキャプチャする方法

Barbara Streisand
Barbara Streisandオリジナル
2024-10-17 15:02:03939ブラウズ

How to Capture Script stdout Output in Python?

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

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