Выполнение чего-либо перед выходом программы

Как у вас есть функция или что-то, что будет выполнено до выхода вашей программы? У меня есть script, который будет постоянно работать в фоновом режиме, и мне нужно его сохранить некоторые данные в файл до его выхода. Есть ли стандартный способ сделать это?

Ответ 1

Проверьте модуль atexit:

http://docs.python.org/library/atexit.html

Например, если я хотел распечатать сообщение, когда мое приложение завершалось:

import atexit

def exit_handler():
    print 'My application is ending!'

atexit.register(exit_handler)

Просто имейте в виду, что это отлично работает для нормального завершения script, но он не будет вызван во всех случаях (например, фатальные внутренние ошибки).

Ответ 2

Если вы хотите, чтобы что-то всегда запускалось, даже при ошибках, используйте try: finally: вроде этого -

def main():
    try:
        execute_app()
    finally:
        handle_cleanup()

if __name__=='__main__':
    main()

Если вы хотите также обрабатывать исключения, вы можете вставить за исключением: до окончательного:

Ответ 3

Если вы остановите script, подняв KeyboardInterrupt (например, нажав Ctrl-C), вы можете поймать это как стандартное исключение. Вы также можете поймать SystemExit таким же образом.

try:
    ...
except KeyboardInterrupt:
    # clean up
    raise

Я упоминаю об этом просто так, чтобы вы знали об этом; "правильным" способом является упомянутый выше модуль atexit.