KeyboardInterrupt

mattia gervaz at gmail.com
Thu Dec 10 17:42:35 EST 2009


Il Thu, 10 Dec 2009 04:56:33 +0000, Brad Harms ha scritto:

> On Thu, 10 Dec 2009 00:29:45 +0000, mattia wrote:
> 
>> Il Wed, 09 Dec 2009 16:19:24 -0800, Jon Clements ha scritto:
>> 
>>> On Dec 9, 11:53 pm, mattia <ger... at gmail.com> wrote:
>>>> Hi all, can you provide me a simple code snippet to interrupt the
>>>> execution of my program catching the KeyboardInterrupt signal?
>>>>
>>>> Thanks,
>>>> Mattia
>>> 
>>> Errr, normally you can just catch the KeyboardInterrupt exception --
>>> is that what you mean?
>>> 
>>> Jon.
>> 
>> Ouch, so the simplest solution is just insert in the 'main' function a
>> try/catch? I believed there was the necessity to create a signal and
>> than attach the KeyboardInterrupt to it...
> 
> 
> KeyboardInterrupt is just an exception that gets raised when CTLR+C (or
> the OS's equivalent keyboard combo) gets pressed. It can occur at any
> point in a script since you never know when the user will press it,
> which is why you put the try: except KeyboardInterrupt: around as much
> of your script as possible.  The signal that the OS sends to the Python
> interpreter is irrelevant.

Ok, so can you tell me why this simple script doesn't work (i.e. I'm not 
able to catch the keyboard interrupt)?

import time
import sys
from threading import Thread

def do_work():
    for _ in range(1000):
        try:
            time.sleep(1)
            print(".", end="")
            sys.stdout.flush()
        except KeyboardInterrupt:
            sys.exit()

def go():
    threads = [Thread(target=do_work, args=()) for _ in range(2)]
    for t in threads:
        t.start()
    for t in threads:
        t.join()
        
go()        



More information about the Python-list mailing list