次のようなことを行うスクリプトがあるとします。
# module writer.py
import sys
def write():
sys.stdout.write("foobar")
ここで、write
関数の出力をキャプチャして、さらに処理するために変数に格納するとします。素朴な解決策は次のとおりです。
# module mymodule.py
from writer import write
out = write()
print out.upper()
しかし、これは機能しません。私は別の解決策を考え出し、それは機能しますが、問題を解決するためのより良い方法があるかどうか教えてください。ありがとう
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