Делать что-то перед выходом из программы - PullRequest
72 голосов
/ 03 октября 2010

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

Ответы [ 3 ]

115 голосов
/ 03 октября 2010

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

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

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

import atexit

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

atexit.register(exit_handler)

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

24 голосов
/ 03 октября 2010

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

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

if __name__=='__main__':
    main()

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

12 голосов
/ 03 октября 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...