Line-by-line processing when stdin is not a tty

Grant Edwards invalid at invalid.invalid
Wed Aug 11 10:13:09 EDT 2010


On 2010-08-11, Tim Harig <usernet at ilthio.net> wrote:
> On 2010-08-11, RG <rNOSPAMon at flownet.com> wrote:
>> When stdin is not a tty, Python seems to buffer all the input through 
>> EOF before processing any of it:
>>
>> [ron at mickey:~]$ cat | python
>> print 123
>> print 456 <hit ctrl-D here>
>> 123
>> 456
>>
>> Is there a way to get Python to process input line-by-line the way it 
>> does when stdin is a TTY even when stdin is not a TTY?
>
> It would be much better to know the overall purpose of what you are trying
> to achieve.  There are may be better ways (ie, sockets) depending what you
> are trying to do.  Knowing your target platform would also be helpful.
>
> For the python interpeter itself, you can can get interactive behavior by
> invoking it with the -i option.

If you're talking about unbuffered stdin/stdout, the option is -u.

I don't really see how the -i option is relevent -- it causes the
interpreter to go into interactive mode after running the script.

> If you want to handle stdin a single line at a time from inside of your
> program, you can access it using sys.stdin.readline().

That doesn't have any effect on stdin buffering.

-- 
Grant Edwards               grant.b.edwards        Yow! ... I want to perform
                                  at               cranial activities with
                              gmail.com            Tuesday Weld!!



More information about the Python-list mailing list