How to write a file generator

bruno.desthuilliers at gmail.com bruno.desthuilliers at gmail.com
Tue Jul 12 17:34:36 CEST 2011


On Jul 12, 4:46 pm, Billy Mays <no... at nohow.com> wrote:
> I want to make a generator that will return lines from the tail of
> /var/log/syslog if there are any

Err... I must have missed something, but python files are their own
iterators.

Python 2.6.6 (r266:84292, Sep 15 2010, 15:52:39)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
pythonrc start
pythonrc done
>>> f = open("/var/log/syslog")
>>> for line in f:
...     print line
...
(snip unintersting syslog stuff))

>, but my function is reopening the file
> each call:

How do you know, and how do you call your function ?

> def getLines():
>      with open('/var/log/syslog', 'rb') as f:
>          while True:
>              line = f.readline()
>              if line:
>                  yield line
>              else:
>                  raise StopIteration
>
> I know the problem lies with the StopIteration, but I'm not sure how to
> tell the caller that there are no more lines for now.

If you want the generator to wait until new content is available, just
remove the raise part - but you'll have a blocking call... Else, I
don't see what behaviour you are expecting exactly.







More information about the Python-list mailing list