別のモジュールの印刷出力をキャプチャするにはどうすればいいですか? 質問する

別のモジュールの印刷出力をキャプチャするにはどうすればいいですか? 質問する

Python でこれが可能かどうか疑問に思いました:

# module1
def test():
    print('hey')

# module2
import module1

module1.test() # prints to stdout

変更せずに、これをラップして変数の内部をキャプチャできるようにするmodule1方法はありますか?スクリプトとして実行する以外に方法はありますか?module2print('hey')module1

ベストアンサー1

変更して以前の値に戻す責任は負いたくないですsys.stdout。上記の回答には条項がないためfinally:、これを他の重要なコードに統合すると危険になる可能性があります。

python.org/3 のライブラリ

import contextlib, io

f = io.StringIO()
with contextlib.redirect_stdout(f):
    module1.test()
output = f.getvalue()

おそらく、リダイレクトされた stdout にoutputある変数が必要になります。<class 'str'>

注: このコードは、公式ドキュメントからわずかな変更を加えて抜粋したものです (ただしテスト済み)。この回答の別のバージョンは、ほとんど重複した質問に対して既に提供されています。https://stackoverflow.com/a/22434594/1092940

私の意見では、これが他の解決策よりもはるかに優れた解決策であるため、ここに回答を残します。

おすすめ記事