Code ausführen wenn Applikation beendet wird

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
DKKA
User
Beiträge: 45
Registriert: Freitag 18. Oktober 2013, 14:20

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.
BlackJack

@DKKA: ``finally`` hast Du ja schon selber erwähnt.

Ansonsten gibt es noch das `atexit`-Modul.
p90
User
Beiträge: 198
Registriert: Donnerstag 22. Juli 2010, 17:30

Vlt atexit?
http://docs.python.org/2/library/atexit.html

keine Ahnung wie das Exceptions handhabt aber vlt. hilft es dir ja bereits weiter.
DKKA
User
Beiträge: 45
Registriert: Freitag 18. Oktober 2013, 14:20

BlackJack hat geschrieben:@DKKA: ``finally`` hast Du ja schon selber erwähnt.

Ansonsten gibt es noch das `atexit`-Modul.
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?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
BlackJack

@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.
Antworten