FreeBSD中,可以使用kevent ("kqueue")机制来监测vnode的变化(可以同时看着多 个打开的vnode)。 具体的C实现可以参考: http://www.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/tail/forward.c?annotate=1.41 Python可以借助 py-kqueue (devel/py-kqueue) 调用 FreeBSD 的 kqueue 支持。
import time, os
filename = 'access_20090602.log'
file = open(filename,'r')
st_size = os.stat(filename)[6]
file.seek(st_size)
while 1:
where = file.tell()
line = file.readline()
if not line:
time.sleep(1)
file.seek(where)
else:
print line,