2013-03-10 11 views
24

Ich mag wissen, ob es möglich ist, ein Strg-C in Python auf die folgende Weise zu fangen:Capture-Steuer-C in Python

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

Ich habe mit try auf Sachen zu lesen und except KeyboardInterrupt aber sie‘ re arbeitet nicht für mich.

+2

So etwas wie: http://stackoverflow.com/questions/1112343/how-do-i-capture-sigint-in-python? –

+0

Ja, aber ich habe versucht, 'KeyboardInterrupt' zu verwenden, aber statt einfach nur zu beenden, führt Python die Operationen in' try' aus, was ich nicht will. – pauliwago

+0

Auf welcher Plattform bist du? Und welche Version von Python? Und lesen Sie Eingaben über 'input' /' stdin.read'/etc., Ein plattformspezifisches 'getch' (wenn ja, welches?),' Flurs' oder ...? Es ist in der Regel in jedem Fall möglich, aber die Antworten sind zwischen den Fällen sehr unterschiedlich. – abarnert

Antwort

35

Betrachten Lesen this Seite über den Umgang mit Ausnahmen .. Es soll helfen.

Wie @abarnert hat gesagt, tun sys.exit() nach except KeyboardInterrupt:.

So etwas wie

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

können Sie auch die in exit() Funktion gebaut verwenden, aber wie @eryksun darauf hingewiesen, sys.exit ist zuverlässiger.

+0

'site.exit' (builtins exit) wird nicht definiert, wenn Python mit' -S' gestartet wird. Das ist nicht üblich, aber "sys.exit" ist zuverlässiger. Sie können auch 'raise SystemExit ([exit_code = 0])' 'verwenden. – eryksun

7

Von Ihren Kommentaren klingt es wie Ihr einziges Problem mit except KeyboardInterrupt: ist, dass Sie nicht wissen, wie Sie es beenden, wenn Sie diesen Interrupt erhalten.

Wenn ja, das ist ganz einfach:

import sys 

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