Hi, Thanks for the responses. My book, Beginning Python: From Novice to Professional(p. 266) says that "sys.stdin is iterable, just like other files", so I thought I would test it out. However, I don't see how it is acting similar to a file in my example.
I assume all input is buffered by default, so I'm not sure how it explains things to say that input from sys.stdin is buffered. > I typed many lines, but lst contains only one item, as expected. Same as > your regular file example: the file contains many lines, but only the > first goes into the list. Interesting example--not as I expected! But there is a difference in the two examples isn't there? When you iterate over a file, the whole file isn't put into an internal buffer first, is it? > I don't know if this a python or OS thing, but I know that iterating over a > file is not like applying successive call to readline method. You should try > to use readline instead. I've wondered what the differences were. Thanks for bringing that up. I searched around on google, and PEP 234 has this to say about that: ------------------------------------ - Files implement a tp_iter slot that is equivalent to iter(f.readline, ""). This means that we can write for line in file: ... as a shorthand for for line in iter(file.readline, ""): ... which is equivalent to, but faster than while 1: line = file.readline() if not line: break ... ... Because the file iterator uses an internal buffer, mixing this with other file operations (e.g. file.readline()) doesn't work right. Also, the following code: for line in file: if line == "\n": break for line in file: print line, doesn't work as you might expect, because the iterator created by the second for-loop doesn't take the buffer read-ahead by the first for-loop into account. A correct way to write this is: it = iter(file) for line in it: if line == "\n": break for line in it: print line, -------------------------------------------- > You may want to look at a related issue: > http://www.python.org/sf/1633941 Bad link. >This should be f = iter(raw_input,"") and this will end in a EOFError >and stop on blank line. So you need a wrapper Why a wrapper? This example seems to work without error: lst = [] f = iter(raw_input, "") for line in f: lst.append(line) print lst -- http://mail.python.org/mailman/listinfo/python-list