Pythonのお勉強 Part11
■ このスレッドは過去ログ倉庫に格納されています
0421デフォルトの名無しさん
2006/08/16(水) 03:25:35俺も同じテクニックを使うことがあったんだけど、この方法に違和感を感じていた。
とゆーのは、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 文が導入されたときに想定されていたんだろうな。
なんつーか、先見の明ってのはこういうことを言うのだろーとオモタ。
■ このスレッドは過去ログ倉庫に格納されています