Does fileinput.input() read STDIN all at once?

Adam Funk a24061 at ducksburg.com
Fri Dec 21 05:43:02 EST 2007


On 2007-12-20, Tim Roberts wrote:

>>As a test, I tried this:
>>
>>   for line in fileinput.input():
>>      print '**', line
>>
>>and found that it would print nothing until I hit Ctl-D, then print
>>all the lines, then wait for another Ctl-D, and so on (until I pressed
>>Ctl-D twice in succession to end the loop).
>
> Note that you are doing a lot more than just reading from a file here. This
> is calling a function in a module.  Fortunately, you have the source to
> look at.
>
> As I read the fileinput.py module, this will eventually call
> FileInput.next(), which eventually calls FileInput.readline(), which
> eventually calls stdin.readlines(_bufsize).  The default buffer size is
> 8,192 bytes.

OK, I think I've got this figured out!

I'll keep using fileinput.input() for the normal case (reading from
files named as arguments) and use sys.stdin.readline() for testing
(reading from the keyboard, when no filenames are given).

Thanks to you and Jonathan for your advice.



More information about the Python-list mailing list