sys.stdin.readline() results in extra space send to stdout

Steve Holden steve at holdenweb.com
Mon Mar 6 17:35:24 CET 2006


Benjamin Rutt wrote:
> There has been a problem that has been bugging me for a while for
> reading input from standard in.  Consider the following simple program:
> 
>     #!/usr/bin/env python
>     import sys
>     print 'enter something: ',
>     answer = sys.stdin.readline().strip()
>     print 'you answered {%s}' % (answer)
> 
> When I run this interactively, the following happens:
> 
>     $ ~/tmp/foo.py 
>     enter something: hi
>      you answered {hi}
> 
> Notice the extra space before 'you'; I did not put it there.  It seems
> that this problem can be avoided if I instead use the program:
> 
>     #!/usr/bin/env python
>     import code
>     answer = code.InteractiveConsole().raw_input('enter something: ')
>     print 'you answered {%s}' % (answer)
> 
> Now, the output is:
> 
>     $ ~/tmp/foo.py 
>     enter something: hi
>     you answered {hi}
> 
> Is this a well-known problem?  Is it a bug?  I do not see why that
> extra space is getting there in the first version.  Using the code
> module seems a little dirty, when sys.stdin is available.  This is
> python 2.4 on a Linux platform.  Thank you,

It's related to the mechanism for printing. Since the last print 
statement executed had a trailing comma, the next one starts its output 
with a sapce. The interpreter doesn't realise that the "carriage" has 
been "returned" by the input.

raw_input() is the bext way to go.

regards
  Steve
-- 
Steve Holden       +44 150 684 7255  +1 800 494 3119
Holden Web LLC/Ltd                 www.holdenweb.com
Love me, love my blog         holdenweb.blogspot.com




More information about the Python-list mailing list