ページ

2010年1月6日

Pythonでtailもどき

WebSockets関連のブログを読んでいたらファイルの末尾の変更を見るために豪快なことをやっていたので、tail -fみたいなことをするサンプル。

#!/usr/bin/python

import os
import time

MAX_INTERVAL = 1.0

def readLines(path):
fp = open(path, "r")
stat = os.stat(path)
fp.seek(stat[6])

try:
while True:
where = fp.tell()
line = fp.readline()
if not line:
time.sleep(MAX_INTERVAL)
fp.seek(where)
else:
yield line
except:
pass
finally:
fp.close()

if __name__ == "__main__":
import sys
for line in readLines(sys.argv[1]):
print line,


ファイルを開き直すでもいいんだけど、前回の読み込んだ位置を覚えておいてseekすれば、もう少しわかりやすいかな?まあ、本質的なことじゃないんだけど、コードが理解できなかったので・・・。

3 件のコメント:

Yuusei さんのコメント...

goでwebsocket chatをsqlite化してみました

http://kumama.org/2009/12/websocketgolang-chat/

skypeのchatみたいなのができると良いなと思ってます。

liris さんのコメント...

どうもです。
参考にしてもらえてうれしいです。
でわでわ

こまっしゅ さんのコメント...

すみません、、、件のブログの者です。
毎回openするのはあほだなぁと思っていましたが、なるほどseekした位置を覚えておけばいいんですね!!

ありがとうございましたm(__)m