Issue 1523853: 2.4.2 file.read caches EOF state (original) (raw)

It seems that python 2.4.2 file reading stuff (for l in f) and (f.read()) cache EOF state. For f.next documtation hints that there is internal buffer so I guess that this is somewhat acceptable there. But for f.read() there is no hint about internal buffering of the state.

This is somewhat unfortunate as tail -f like functionality is impossible to implement without doing lowlevel io (os.read) (as traddional unix has no select-like functionality on files).

Tested on solaris8. This is either library or documentation bug.

Code below

def iterline(f): """ Own function because the internal seems to buffer EOF """ b=[] while 1: data=os.read() print data,b,f.tell(),
os.fstat(f.fileno()).st_size if len(data) == 0: time.sleep(1) continue idx=data.find('\n') while idx > 0: line=data[:idx] if b: yield ''.join(b) + line b = [] else: yield line data=data[idx+1:] idx=data.find('\n') b.append(data) raise StopIteration

Output '' [''] 1699424 1699424 (log lines appended here) '' [''] 1699424 1699647

In Linux, it seems to be the behaviour of the underlying C function 'fread'.

Do you think it's ok to add the following line in the read() documentation?

""" As this function depends of the underlying C function :cfunc:fread, inheritates its behaviour in details like caching EOF and others. """

Assigning this to George, to reword that in nicer English and apply.

Regards,