Flush stdin

Nobody nobody at nowhere.invalid
Sun Oct 19 03:11:56 CEST 2014


On Sat, 18 Oct 2014 12:32:07 -0500, Tim Chase wrote:

> On 2014-10-18 17:55, Nobody wrote:
>> On Fri, 17 Oct 2014 12:38:54 +0100, Empty Account wrote:
>> 
>> > I am using netcat to listen to a port and python to read stdin and
>> > print to the console.
>> > 
>> > nc -l 2003 | python print_metrics.py
>> > 
>> > sys.stdin.flush() doesn’t seem to flush stdin,
>> 
>> You can't "flush" an input stream.
> 
> You can't flush it, but you can make it unbuffered.  You can either force
> python to use unbuffered stdio:

[snipped]

None of this helps in any way, as it's not the behaviour of the Python
script which is causing the problem, but that "nc" is (probably) buffering
its output, so the data isn't passed to the OS (let alone to the Python
script) in a timely manner.

Once the "nc" process actually write()s the data to its standard
output (i.e. desriptor 1, not the "stdout" FILE*), it will be available to
the Python script immediately thereafter without requiring any low-level
tweaks.




More information about the Python-list mailing list