On 02:43 am, ivo...@gmail.com wrote:
I'm trying to simply imitate what "tail -f" does, i.e. read a file, wait
until it's appended to and process the new data, but apparently I'm
missing something.

The code is:

54     f = file(filename, "r", 1)
55     f.seek(-1000, os.SEEK_END)
56     ff = fcntl.fcntl(f.fileno(), fcntl.F_GETFL)
57     fcntl.fcntl(f.fileno(), fcntl.F_SETFL, ff | os.O_NONBLOCK)
58
59     pe = select.poll()
60     pe.register(f)
61     while True:
62         print repr(f.read())
63         print pe.poll(1000)

The problem is: poll() always returns that the fd is ready (without
waiting), but read() always returns an empty string. Actually, it
doesn't matter if I turn O_NDELAY on or off. select() does the same.

Any advice?

select(), poll(), epoll, etc. all have the problem where they don't support files (in the thing-on-a-filesystem sense) at all. They just indicate the descriptor is readable or writeable all the time, regardless.

"tail -f" is implemented by sleeping a little bit and then reading to see if there's anything new.

Jean-Paul
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to