トップ «前の日記(11/30/2008) 最新 次の日記(12/02/2008)» 編集

本 日 の h o g e

hogeとはワイルドカードのようなものです。日々起こった、さまざまなこと −すなわちワイルドカード− を取り上げて日記を書く、という意味で名付けたのかというとそうでもありません。適当に決めたらこんな理由が浮かんできました。

更新情報の取得には rdflirs を使ってもらえると嬉しいです.


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 に書けば良かったかな...

本日のツッコミ(全9件) [ツッコミを入れる]
kou (12/02/2008 19:40)

assert_search_syslog_callの方は再現できないのでよくわからんのですが、とりあえず、len() == 0とかしないでそのまま条件式に使うことにしました。(空文字がFalseというのが気持ち悪いんだけども)

ところで、hasattr(dict, "name")とname in dictってどう違うんですか?

atzm (12/02/2008 23:17)

うーん,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__ モジュールそれ自身の辞書のエイリアスです。」とあるので,多分これですね.

kou (12/03/2008 19:58)

なるほど。
__builtin__モジュールを使うようにしておきました。

atzm (12/05/2008 01:13)

おお,ありがとうございます.
syslog はやっぱりまだ起こりますね.
うちの環境がおかしいかもなのでちょっといじってみます.

atzm (12/17/2008 03:00)

assert_search_syslog_call のコード見てて思ったんですが,syslog サーバによるログの write (と sync) が少しでも遅れたら mark を見つけられなくて死亡しますね.
select のリファレンス [*1] にも「通常のファイルに対して適用し、最後にファイルを読み出した時から内容が増えているかを決定するために使うことはできません」とありますし,別の方法を使わないとだめっぽいです.

[*1] http://www.python.jp/doc/release/lib/module-select.html

kou (12/17/2008 06:45)

なるほど。
考えてみます。

kou (12/24/2008 22:37)

tailとselectにしてみました。
どうでしょう。

atzm (12/25/2008 10:47)

おお,ありがとうございます!!
うまく動作してるようです :)

O_NONBLOCK してるのは何でかなーと思ったら,file#read() のためなんですね.なるほど.

kou (12/25/2008 13:13)

確認ありがとうございます。
近いうちにリリースしておきます。