hogeとはワイルドカードのようなものです。日々起こった、さまざまなこと −すなわちワイルドカード− を取り上げて日記を書く、という意味で名付けたのかというとそうでもありません。適当に決めたらこんな理由が浮かんできました。
12/01/2008 んー [長年日記]
tDiary 2230日目
■ [Py] Pikzie 使ってみた
確かに見やすくて素敵かも.
が,time.strptime 使ったら死んだ. assert_* 以前に死ぬのが謎.
import time import pikzie class TestTime(pikzie.TestCase): def test_strptime(self): time.strptime('2008 Nov 10 00:00:00', '%Y %b %d %H:%M:%S')
で
$ python hoge.py E 1) Error: TestTime.test_strptime hoge.py:6: time.strptime('2008 Nov 10 00:00:00', '%Y %b %d %H:%M:%S') /usr/lib/python2.4/_strptime.py:269: _TimeRE_cache = TimeRE() /usr/lib/python2.4/_strptime.py:213: 'Z'), /usr/lib/python2.4/_strptime.py:229: to_convert = sorted(to_convert, key=len, reverse=True) /usr/lib/python2.4/site-packages/pikzie/__init__.py:5: list = iterable[:] exceptions.TypeError: unsubscriptable object Finished in 0.015 seconds 1 test(s), 0 assertion(s), 0 failure(s), 1 error(s), 0 pending(s), 0 notification(s)
ジェネレータをスライシングしようとしてこけたのか. けど 2.4 だから __builtins__ に sorted は定義済みのはずだけどなぁ.
あと assert_search_syslog_call が syslogd 1.4.1 相手だとよくキョドる. mark を見つけられなくて死亡することが多い. 深く追ってないけど,何か select 後の最初の read で EOF が返って,空文字列と比較しちゃってる風味.
ああ
即興で作った pikzie-svn-20081202.ebuild.
オレオレ証明書の https が含まれてるせいで interactive になってしまう. まあ,オレオレ ebuild なので気にしないことにする.
うお
今日 (12/02) svn up したら strptime の方は直ってた. 相変わらず kou さん反応 HAEEEEEEEEEEE!!!
てか tracker に書けば良かったかな...
assert_search_syslog_callの方は再現できないのでよくわからんのですが、とりあえず、len() == 0とかしないでそのまま条件式に使うことにしました。(空文字がFalseというのが気持ち悪いんだけども)
ところで、hasattr(dict, "name")とname in dictってどう違うんですか?
うーん,syslog は環境依存ですかねえ.ちょっとまた試してみます.
hasattr は属性値,in はコンテナのメンバシップ評価 (相手が dict なら has_key() と同義) になるので,以下のような感じです.
>>> d = {'a': 1, 'b': 2, 'c': 3}
>>> hasattr(d, 'a')
False
>>> 'a' in d
True
>>> hasattr(d, 'keys')
True
http://www.python.jp/doc/release/ref/naming.html
ここを見ると,「__main__ モジュール中においては、 __builtins__ は組み込みモジュール __builtin__ です (注意: 's' なし);それ以外のモジュールでは、__builtins__ は __builtin__ モジュールそれ自身の辞書のエイリアスです。」とあるので,多分これですね.
なるほど。
__builtin__モジュールを使うようにしておきました。
おお,ありがとうございます.
syslog はやっぱりまだ起こりますね.
うちの環境がおかしいかもなのでちょっといじってみます.
assert_search_syslog_call のコード見てて思ったんですが,syslog サーバによるログの write (と sync) が少しでも遅れたら mark を見つけられなくて死亡しますね.
select のリファレンス [*1] にも「通常のファイルに対して適用し、最後にファイルを読み出した時から内容が増えているかを決定するために使うことはできません」とありますし,別の方法を使わないとだめっぽいです.
[*1] http://www.python.jp/doc/release/lib/module-select.html
なるほど。
考えてみます。
tailとselectにしてみました。
どうでしょう。
おお,ありがとうございます!!
うまく動作してるようです :)
O_NONBLOCK してるのは何でかなーと思ったら,file#read() のためなんですね.なるほど.
確認ありがとうございます。
近いうちにリリースしておきます。