Hallo,
Wie kann ich Python dazu bringen ein Stück Code auszuführen wenn die Applikation beendet wird? So etwas das ähnlich funktioniert wie das "finally"-statment. Beispielsweise wenn eine Applikation geschlossen wird, wird zuerst noch der aktuelle Stand des Programmes in einer Text-Datei gespeichert. Ich möchte verhindern, dass Daten verloren gehen wenn eine Applikation abrupt geschlossen wird. Vielen Dank.
Code ausführen wenn Applikation beendet wird
@DKKA: ``finally`` hast Du ja schon selber erwähnt.
Ansonsten gibt es noch das `atexit`-Modul.
Ansonsten gibt es noch das `atexit`-Modul.
Vlt atexit?
http://docs.python.org/2/library/atexit.html
keine Ahnung wie das Exceptions handhabt aber vlt. hilft es dir ja bereits weiter.
http://docs.python.org/2/library/atexit.html
keine Ahnung wie das Exceptions handhabt aber vlt. hilft es dir ja bereits weiter.
Hm leider funktioniert das Modul bei os._exit(0) nicht. Ich arbeite mit Eclipse und wenn ich auf "Terminate" klicke wird die registrierte Funktion trotzdem nicht aufgerufen, von daher vermute ich wird ois._exit(0) aufgerufen. Wie steht es den wenn das Python-Program am laufen ist und der User den Computer herunterfährt, funktioniert dann das Modul?BlackJack hat geschrieben:@DKKA: ``finally`` hast Du ja schon selber erwähnt.
Ansonsten gibt es noch das `atexit`-Modul.
@DKKA: was passiert, wenn jemand den Computer aus dem Fenster wirft? Natürlich gibt es immer einen Weg, dass das Programm keine Chance mehr hat, zu merken, dass es beendet wird. Der normale Weg über »sys.exit« wird aber von »atexit« unterstützt. Dieser Weg ist aber auch normalerweise unnötig, da es nur einen Punkt geben sollte, an dem ein Programm beendet wird, nämlich dann, wenn die »main«-Funktion verlassen wird. »atexit« wird nur für Module gebraucht, die keinen Einfluß auf »main« haben.
@DKKA: Bei `os._exit()` deutet der führende Unterstrich ja schon an, dass man die Funktion nicht verwenden sollte, da sie nicht zur öffentlichen API gehört.
Der Menüpunkt „Terminate” bei Eclipse benutzt das auch nicht, denn wie sollte eine IDE auch *von aussen* eine Funkion in dem Prozess aufrufen. Eclipse killt einfach den Prozess, das ist damit auch kein normales beenden Deines Programms. Das ist für Prozesse gedacht die festhängen, oder wenn man ein Programm beim entwickeln abbrechen möchte weil man nicht auf das reguläre Ende warten will. Das entspricht ohne die IDE dem Vorgehen sich im Taskmanager den Prozess zu suchen und zu killen, statt ein Programm über das 'x'-Icon in der Fensterleiste oder den entsprechenden Menüpunkt zu schliessen.
Der Menüpunkt „Terminate” bei Eclipse benutzt das auch nicht, denn wie sollte eine IDE auch *von aussen* eine Funkion in dem Prozess aufrufen. Eclipse killt einfach den Prozess, das ist damit auch kein normales beenden Deines Programms. Das ist für Prozesse gedacht die festhängen, oder wenn man ein Programm beim entwickeln abbrechen möchte weil man nicht auf das reguläre Ende warten will. Das entspricht ohne die IDE dem Vorgehen sich im Taskmanager den Prozess zu suchen und zu killen, statt ein Programm über das 'x'-Icon in der Fensterleiste oder den entsprechenden Menüpunkt zu schliessen.