Seite 1 von 1

Code ausführen wenn Applikation beendet wird

Verfasst: Sonntag 23. Februar 2014, 19:51
von DKKA
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.

Re: Code ausführen wenn Applikation beendet wird

Verfasst: Sonntag 23. Februar 2014, 20:08
von BlackJack
@DKKA: ``finally`` hast Du ja schon selber erwähnt.

Ansonsten gibt es noch das `atexit`-Modul.

Re: Code ausführen wenn Applikation beendet wird

Verfasst: Sonntag 23. Februar 2014, 20:39
von p90
Vlt atexit?
http://docs.python.org/2/library/atexit.html

keine Ahnung wie das Exceptions handhabt aber vlt. hilft es dir ja bereits weiter.

Re: Code ausführen wenn Applikation beendet wird

Verfasst: Sonntag 23. Februar 2014, 22:26
von DKKA
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?

Re: Code ausführen wenn Applikation beendet wird

Verfasst: Sonntag 23. Februar 2014, 22:41
von Sirius3
@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.

Re: Code ausführen wenn Applikation beendet wird

Verfasst: Sonntag 23. Februar 2014, 23:11
von 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.