話の流れとぜんぜん関係ないけど>>178のテクニックに関して。
俺も同じテクニックを使うことがあったんだけど、この方法に違和感を感じていた。
とゆーのは、sys.stdout を大域的に書き換えて print 文の挙動を変えるという
やり方が乱暴というかトリッキーであまり好きになれないんだよね。

で、こういう目的のために「print >>ファイル, ...」の形式の print 文は
とても便利なんジャマイカということに今さら気づいた。

import codecs
from sys import stdout, stderr
Writer = codecs.getwriter("utf-8")
stdout = Writer(stdout)
stderr = Writer(stderr)

u = u"日本語"
print >>stdout, "u =", repr(u), u"('%s')" % u
print >>stderr, "Error:", u

この方法の利点:
1) print 文の便利さはそのまま。
2) 出力先が端末でもファイルでも同じように動作する。
3) Writer でラップした stdout や stderr を局所的に使える。
4) 俺は今ラップした標準出力と標準エラーを使ってるんだぞーという注意事項を
陽に記述できて気持ちがいい。

きっとこの用途はこの形式の print 文が導入されたときに想定されていたんだろうな。
なんつーか、先見の明ってのはこういうことを言うのだろーとオモタ。