Can't detect EOF from stdin on windows console
Peter Hansen
peter at engcorp.com
Mon Apr 3 11:41:39 EDT 2006
Serge Orlov wrote:
> Dmitry Anikin wrote:
>>I want to read stdin in chunks of fixed size until EOF
>>I want to be able (also) to supply data interactively in console
>>window and then to hit Ctrl+Z when finished
>
> [snip fighting with windows]
>
>>Read at most size bytes from the file (less if the read hits EOF before obtaining size bytes).
>>According to that, stdin.read(3), when supplied with "12^Z" should return immediately
>>with two-character string instead of waiting for third character after EOF.
>
> On windows EOF is recognized only in the beginning of a line. That is
> how almost all console applications work on windows. So you have to use
> either .readline() method or .read(1)
Weird... I never knew this, although I had noticed-in-passing that
hitting ^Z to exit the interpreter didn't always work as intended. Nice
to have an explanation why.
On a related note though: EOF _is_ recognized in mid-line if you are
just reading from a file (in text mode, obviously, not binary mode). I
wonder what freakish design decisions led to that situation...
-Peter
More information about the Python-list
mailing list