The iterator for files is a little bit like this generator function: def lines(f): while 1: chunk = f.readlines(sizehint) for line in chunk: yield line Inside file.readlines, the read from the tty will block until sizehint bytes have been read or EOF is seen.
I'm not the OP, but thanks for putting 2 and 2 together for me anyway. :) I just tested it on my Windows XP box, and discovered that
for line in sys.stdin:
...
actually does read a line at a time, as long as the lines are at least 8192 characters long. ;)
def lines(f): # untested """lines(f) If f is a terminal, then return an iterator that gives a value after each line is entered. Otherwise, return the efficient iterator for files.""" if hasattr(f, "fileno") and isatty(f.fileno()): return iter(f.readline, '') return iter(f)
Slick. Thanks!
STeVe -- http://mail.python.org/mailman/listinfo/python-list