sys.stdin.readline() results in extra space send to stdout
Steve Holden
steve at holdenweb.com
Mon Mar 6 11:35:24 EST 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