print で標準出力以外に出力する
この記事は Python Tips Advent Calendar 2012 5日目の記事です。
※以下の説明は Python 2 用です。Python 3 では print(..., file=sys.stderr) などになります。
print 関数はデフォルトでは標準出力に出力しますが、明示的に指定すればそれ以外の場所、標準エラーなどにも出力できます。
>>> import sys >>> print>>sys.stderr, 10,20 # 標準出力に '10 20\n' が出力される
これはファイルオブジェクトのようなインターフェースさえ持ってるものなら何でもいいので、当然ファイルにも出力できます。
>>> with open('hoge', 'w') as f: ... print>>f, 10,20 # 'hoge' ファイルに '10 20\n' が出力される
また、StringIO を使うと、print の出力を文字列として受け取る事ができます。
>>> import StringIO >>> fd = StringIO.StringIO() >>> print>>fd, 10,20 >>> fd.getvalue() '10 20\n'
これは例えば、出力する文字列に対するテストなどに使えます。
>>> import sys >>> def print_rot13(data, fd = sys.stdout): ... print>>fd, data.encode('rot13') >>> >>> import StringIO >>> fd = StringIO.StringIO() >>> print_rot13('Hello', fd) >>> assert fd.getvalue() == 'Uryyb\n'
.