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

B

Benjamin Rutt

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,
 
S

Steve Holden

Benjamin said:
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,768
Messages
2,569,574
Members
45,049
Latest member
Allen00Reed

Latest Threads

Top