Seite 1 von 1
Kontrolliertes Ende nach KeyboardInterrupt
Verfasst: Donnerstag 28. Februar 2008, 19:24
von numerix
Kürzlich habe ich einem der Programme hier im Forum etwas entdeckt, das ich leider nicht mehr wiederfinde ...
Beim Abbruch eines (Konsolen-)Programms mittels <Strg>-<C> wurde das vom Programm abgefangen, so dass vor dem tatsächlichen Terminieren z.B. noch Daten gesichert werden konnten.
Ergänzende Frage dazu: Gibt es so etwas auch für <Strg>-<D> ?
Verfasst: Donnerstag 28. Februar 2008, 19:29
von BlackJack
Du kannst den `KeyboardInterrupt` abfangen wie jede andere Ausnahme auch.
Strg-D (unter Windows Strg-Z) veranlasst das Terminal sein Ende der Pipe zu schliessen, die bei `sys.stdin` rein kommt. Das müsste man mit `sys.stdin.closed` testen können.
Verfasst: Donnerstag 28. Februar 2008, 20:20
von lunar
Alternativ kann man unter auch das signal-Modul benutzen, um SIGINT abzufangen.
Verfasst: Freitag 29. Februar 2008, 16:42
von HWK
Müsste ja auch mit atexit gehen.
MfG
HWK
Verfasst: Freitag 29. Februar 2008, 17:01
von CM
Habe gerade so etwas in einem Projekt drin, also schnell gepastet:
Code: Alles auswählen
import logging
import signal
def initialize_signal_handler(parent):
# set signal handler for keyboard interruptes
signal.signal(signal.SIGTERM, parent._onexit) # term
signal.signal(signal.SIGABRT, parent._onexit) # abort
signal.signal(signal.SIGINT, parent._onexit) # keyboard interrupt
class foo(object):
def __init__(self, ...):
....
initialize_signal_handler(self)
def _onexit(self, signum, frame):
...
logging.error("\n\nCaught signal %s, %s!" % (signum, frame))
HTH
Christian
Verfasst: Freitag 29. Februar 2008, 22:13
von numerix
Danke euch allen.
Das meiste habe ich verstanden.
Vorläufig genügt mir die "kleine Lösung" über das Abfangen der entsprechenden exception.