Re: Inconsistent raw_input behavior after Ctrl-C

2009-10-20 Thread Maxim Khitrov
On Tue, Oct 20, 2009 at 6:09 PM, Maxim Khitrov mkhit...@gmail.com wrote:
 Hello all,

 I ran into a rather strange problem when interrupting a raw_input call
 with Ctrl-C. This is with python 2.6.3 on Windows 7. When the call is
 interrupted, one of two things happen - either a KeyboardInterrupt
 exception is raised or raw_input raises EOFError, and
 KeyboardInterrupt is raised a line or two later.

 This makes no sense to me. First, where does raw_input get EOF (Ctrl-Z
 or F6) from? Second, why is KeyboardInterrupt raised in the middle of
 executing a print instruction and not at raw_input? Third, if the
 inner except clause finishes too soon (for example, if I comment out
 the print statement), then the KeyboardInterrupt is sometimes raised
 at the print '---' line. This makes it difficult to consistently
 handle a Ctrl-C event without calling something like sleep after an
 EOFError.

 I don't recall seeing this problem in Windows XP, but I'm not able to
 test on it right now. Is this problem related to Windows 7 in some
 way?

 - Max


Replying to my own post... The code below seems to fix the problem,
though it is obviously a hack I would rather do without. I have no
idea if 50ms is enough to wait for a KeyboardInterrupt, but so far
I've not encountered any inconsistent behavior.

import __builtin__
import time

def raw_input2(prompt=''):

Workaround for raw_input raising EOFError and KeyboardInterrupt on 
Ctrl-C.

try:
return raw_input1(prompt)
except EOFError as exc:
# If KeyboardInterrupt is not raised in 50ms, it's a real EOF 
event.
time.sleep(0.05)
raise

raw_input1 = raw_input
__builtin__.raw_input = raw_input2

try:
raw_input()
except BaseException as exc:
print type(exc)
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Inconsistent raw_input behavior after Ctrl-C

2009-10-20 Thread Gabriel Genellina
En Tue, 20 Oct 2009 19:09:00 -0300, Maxim Khitrov mkhit...@gmail.com  
escribió:



I ran into a rather strange problem when interrupting a raw_input call
with Ctrl-C. This is with python 2.6.3 on Windows 7. When the call is
interrupted, one of two things happen - either a KeyboardInterrupt
exception is raised or raw_input raises EOFError, and
KeyboardInterrupt is raised a line or two later.


I could not reproduce it with XP so it may be an issue with Windows 7 only.

--
Gabriel Genellina

--
http://mail.python.org/mailman/listinfo/python-list