Делать что-то перед выходом из программы


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

3 57

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 модуль, упомянутых выше.