2017-05-20 5 views
1

Ich habe ein Protokoll erstellt und möchte es bei energischer Beendigung des Python-Skripts aktualisiert werden. Dies wird dazu beitragen, alle wichtigen Beendigungen zu verfolgen. Ich habe es versucht, aber atexit() läuft nur bei normaler Beendigung.Führen Sie eine Funktion bei der gewaltsamen Beendigung des Skripts in Python

+0

Wie wird das Skript beendet? Die Tastatur oder wird sie von etwas anderem getötet? –

+0

Ja, Keyboard wird die Terminierung durchführen. –

Antwort

1

Nur die Ausnahme KeyboardInterrupt fangen.

Dieses einfache Programm zeigt, wie eine Funktion ausgeführt werden kann, wenn die Ctrl +C Tastenkombination zu beenden gedrückt wird.

def main(): 
    while True: 
     input('') 

def onexit(): 
    print('on exit') 

try: 
    main() 
except KeyboardInterrupt: 
    onexit() 
+0

Was ist mit Strg + Z? –

+0

Das ist keine Kündigung obwohl es ist. Es bringt den Prozess zurück. Siehe https://superuser.com/questions/476873/what-is-effect-of-ctrl-z-on-a-unix-linux-application/476874 –

+0

Dies funktioniert nicht für andere (Nicht-Tastatur-) Signale für Kündigung (zum Beispiel, erzwingt sie mit 'kill -SIGTERM'). Das Verwenden des "Signal" -Moduls und das Abhören aller "Beendigungssignale" ist eine umfassendere Lösung. – zwer

Verwandte Themen