Делать что-то перед выходом из программы
Как вы можете иметь функцию или что-то, что будет выполняться до завершения работы программы? У меня есть скрипт, который будет постоянно работать в фоновом режиме, и мне нужно сохранить некоторые данные в файл до его завершения. Есть ли стандартный способ сделать это?
3 ответа:
Проверьте
atexit
модуль:http://docs.python.org/library/atexit.html
например, если я хотел напечатать сообщение, когда мое приложение заканчивалось:
import atexit def exit_handler(): print 'My application is ending!' atexit.register(exit_handler)
просто имейте в виду, что это отлично работает для нормального завершения скрипта, но он не будет вызываться во всех случаях (например, фатальные внутренние ошибки).
Если вы хотите, чтобы что-то всегда запускалось, даже при ошибках, используйте try: finally: like this -
def main(): try: execute_app() finally: handle_cleanup() if __name__=='__main__': main()
Если вы хотите также обрабатывать исключения, вы можете вставить except: перед finally:
если вы остановите скрипт, подняв
KeyboardInterrupt
(например, нажав Ctrl-C), вы можете поймать это как стандартное исключение. Вы также можете пойматьSystemExit
точно так же.try: ... except KeyboardInterrupt: # clean up raise
я упоминаю об этом только для того, чтобы вы знали об этом; "правильный" способ сделать это -
atexit
модуль, упомянутых выше.