2013-03-10 12 views
24

Chcę wiedzieć, czy jest możliwe, aby złapać Control-C w Pythonie w następujący sposób:Przechwytywanie Control-C w Pythonie

if input != contr-c: 
    #DO THINGS 
else: 
    #quit 

czytałem się na rzeczy z try i except KeyboardInterrupt ale oni nie działa dla mnie.

+2

Coś takiego: http://stackoverflow.com/questions/1112343/how-do-i-capture-sigint-in-python? –

+0

Tak, ale próbowałem używać 'KeyboardInterrupt', ale zamiast po prostu wyjść, Python wykonuje operacje w' try', co nie jest tym, czego chcę. – pauliwago

+0

Na jakiej platformie jesteś? A jaka wersja Pythona? Czy czytasz wejście przez 'input' /' stdin.read'/etc., Specyficzne dla platformy 'getch' (jeśli tak, które?),' Curses', czy ...? Zasadniczo jest to możliwe w każdym przypadku, ale odpowiedzi są bardzo różne w poszczególnych przypadkach. – abarnert

Odpowiedz

35

Rozważmy czytanie this stronę o obsługę wyjątków .. Powinno pomóc.

Jak powiedział @abarnert, wykonaj sys.exit() po except KeyboardInterrupt:.

Coś

try: 
    # DO THINGS 
except KeyboardInterrupt: 
    # quit 
    sys.exit() 

Można również skorzystać z wbudowanego w exit() funkcji, ale jak @eryksun wskazał, sys.exit jest bardziej niezawodny.

+0

'site.exit' (exitins exit) nie zostanie zdefiniowane, jeśli Python jest uruchamiany z' -S'. To nie jest powszechne, ale nadal "sys.exit" jest bardziej niezawodne. Możesz także użyć 'raise SystemExit ([exit_code = 0])'. – eryksun

7

Z twoich komentarzy wynika, że ​​jedynym problemem z except KeyboardInterrupt: jest to, że nie wiesz, jak go zakończyć, gdy otrzymasz przerwanie.

Jeśli tak, to proste:

import sys 

try: 
    user_input = input() 
except KeyboardInterrupt: 
    sys.exit(0)