pythonで標準出力されたデータを取得する

pythonにおいて、printステートメントなどで出力されるデータは、標準出力ストリームに書きこまれます。
では、一度printステートメントで出力した文字列を取得することはできるんでしょうか。



結論を言えば、できます


ならどうやって取得するのか

標準出力ストリームに出力しているもの、それがsys.stdoutです。
この標準出力ストリームを、別のオブジェクトにしてやればいいのです。
つまり、

>>> import sys
>>> sys.stdout = open("tmep.txt","w")

こうすることによって、printステートメントなどで出力されるデータをtemp.txtというファイルの中にしまうことができます
したがって、

>>> print "HELLO WORLD!" #この時点でtemp.txtに"HELLO WORLD!"がwriteされている
>>> sys.stdout.close()
>>> sys.stdout = sys.__stdout__
>>> open("temp.txt","r").read()
"HELLO WORLD!"

こうすることによって、標準出力されたデータを取得することができます。
あとは、ファイルオブジェクトを使ってデータを呼び出せば良いのです。


意外と簡単でしたね!
ちなみに、sys.stdoutを別のオブジェクトにして、close()したあとは、
標準出力ストリームがない!とpythonにエラーを出されます。
なので、普通の標準出力ストリームに戻すには、

>>> sys.stdout = sys.__stdout__

このような式を書く必要があります。この式で、sys.stdoutは普通の標準出力ストリームになりました。
以上で、今回の記事を終わります。ありがとうございました!