Python でこれが可能かどうか疑問に思いました:
# module1
def test():
print('hey')
# module2
import module1
module1.test() # prints to stdout
変更せずに、これをラップして変数の内部をキャプチャできるようにするmodule1
方法はありますか?スクリプトとして実行する以外に方法はありますか?module2
print('hey')
module1
ベストアンサー1
変更して以前の値に戻す責任は負いたくないですsys.stdout
。上記の回答には条項がないためfinally:
、これを他の重要なコードに統合すると危険になる可能性があります。
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
私の意見では、これが他の解決策よりもはるかに優れた解決策であるため、ここに回答を残します。