raw_input bug only in cygwin python

David Carson davidccarson at hotmail.com
Fri Apr 19 10:10:02 EDT 2002


Tim Roberts <timr at probo.com> wrote in message news:<kuavbukpa505nru9g6kfivo3bfrtirda05 at 4ax.com>...
> davidccarson at hotmail.com (David Carson) wrote:
> 
> >Here is a snippet of code:
> >
> >01: #!/usr/bin/env python
> >02: 
> >03: list = []
> >04: while 1:
> >05:     try:
> >06:         stuff = raw_input("[^D to exit]: ")
> >07:     except EOFError:
> >08:         print "got EOF"
> >09:         break
> >10:     list.append(stuff)
> >11: 
> >12: raw_input("bang! ")
> >
> >
> >This works on every Python environment I've tried but cygwin (Win2000
> >-- I haven't got NT to try it):
> >  Python 2.2 (#1, Dec 31 2001, 15:21:18)
> >  [GCC 2.95.3-5 (cygwin special)] on cygwin
> >
> >In this environment, the EOFError is caught.  Then the "bang! " prompt
> >for the raw_input() outside the loop is printed, but immediately the
> >program exits with an uncaught EOFError.
> >
> >This code works with:
> >- ActiveState Python, 2.1 on Win2000
> >- python 2.2 on Mandrake
> >- python 1.5.2 on RedHat
> >and everywhere else, I'm sure.
> >
> >Is this a known problem with cygwin?
> 
> I wouldn't call it a problem with cygwin, I'd call it "relying on
> unspecified behavior".  Ctrl-D is end of file; the ability to read past EOF
> is not promised anywhere in the docs.


Ah, I see.  However, I've seen this technique recommended in several
docs/tutorials.  Also, the docs do promise raw_input() will raise
EOFError when EOF is read.  So, if it is true that I'm relying on
unspecified behavior, my question is: How do I make this code
reliable?  Is there a simple way to clear the EOF indication on stdin?
 I hope there is a good way, because I like this kind of input loop
much better than the "type 'q' to quit" ilk.

Thanks,
David



More information about the Python-list mailing list