web-dev-qa-db-ja.com

プログラム終了前に何かをする

プログラムが終了する前に実行される関数または何かをどのように持つことができますか?バックグラウンドで常に実行されるスクリプトがあり、終了する前にファイルにデータを保存する必要があります。これを行う標準的な方法はありますか?

73
RacecaR

atexitモジュールを確認してください。

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

たとえば、アプリケーションの終了時にメッセージを印刷したい場合:

import atexit

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

atexit.register(exit_handler)

これは、スクリプトの通常の終了には最適ですが、すべての場合に呼び出されるわけではないことに注意してください(致命的な内部エラーなど)。

118

エラーがあっても常に実行したい場合は、try:finally:like this-を使用します。

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

if __name__=='__main__':
    main()

例外も処理したい場合は、最終的に:の前にexcept:を挿入できます。

24
Brian C. Lane

KeyboardInterruptを上げることによって(たとえば、Ctrl-Cを押すことによって)スクリプトを停止した場合、標準の例外としてそれをキャッチできます。同じ方法でSystemExitをキャッチすることもできます。

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

あなたがそれについて知っているように、私はこれに言及します。これを行う「正しい」方法は、上記のatexitモジュールです。

13
Katriel