Jak możesz mieć funkcję lub coś, co zostanie wykonane przed zamknięciem programu? Mam skrypt, który będzie stale działał w tle i potrzebuję go do zapisania niektórych danych w pliku przed jego zamknięciem. Czy jest na to standardowy sposób?
Jak możesz mieć funkcję lub coś, co zostanie wykonane przed zamknięciem programu? Mam skrypt, który będzie stale działał w tle i potrzebuję go do zapisania niektórych danych w pliku przed jego zamknięciem. Czy jest na to standardowy sposób?
Odpowiedzi:
Sprawdź atexit
moduł:
http://docs.python.org/library/atexit.html
Na przykład, jeśli chciałbym wydrukować komunikat, gdy moja aplikacja kończy działanie:
import atexit
def exit_handler():
print 'My application is ending!'
atexit.register(exit_handler)
Należy tylko pamiętać, że działa to świetnie w przypadku normalnego zakończenia skryptu, ale nie zostanie wywołane we wszystkich przypadkach (np. Krytyczne błędy wewnętrzne).
Note The exit function is not called when the program is killed by a signal, when a Python fatal internal error is detected, or when os._exit() is called
.
Jeśli chcesz, aby coś działało zawsze, nawet w przypadku błędów, użyj try: finally:
tego -
def main():
try:
execute_app()
finally:
handle_cleanup()
if __name__=='__main__':
main()
Jeśli chcesz również obsługiwać wyjątki, możesz wstawić except:
przedfinally:
Jeśli zatrzymasz skrypt, podnosząc znak KeyboardInterrupt
(np. Naciskając Ctrl-C), możesz to złapać jako standardowy wyjątek. Możesz też złapać SystemExit
w ten sam sposób.
try:
...
except KeyboardInterrupt:
# clean up
raise
Wspominam o tym, żebyście o tym wiedzieli; „właściwym” sposobem jest atexit
wspomniany powyżej moduł.