3
import atexit
import sys 

@atexit.register
def goodbye():
    print "Good Bye"

print "Hello World"
#sys.exit(0) or sys.exit(1)

上記のコードでGood Byeは、が終了するたびに実行されます。終了ステータスに応じて異なるメッセージを出力できますか?終了ステータスが1の場合のように、FATAL: Good Bye

私もチェックsys.exitfuncしましたが、それもこれをサポートしていないようですか?これはサポートされるべき基本的なものではありませんか、またはこのような場合に使用するのに適したものがあります。ラッパー関数を使用してプログラムを終了する唯一の方法はありますか?

4

1 に答える 1

1

モンキーパッチsys.exitはかなり簡単にできます。

>>> import sys
>>> sys.my_exit = sys.exit
>>> def func(status):
...     if status:
...        print "Fatal!"
...     sys.my_exit(status)
... 
>>> sys.exit = func
>>> sys.exit(1)
Fatal!

もちろん、これsys.exitは実際にコード内のどこかから呼び出された場合にのみ実行されます...

または、メイン関数をtry/exceptでラップすることもできます。

import sys
def main():
    pass
    sys.exit(2) #comment this out, or change the exit status to 0 to test.

try:
    main()
except SystemExit as e:
    if e.args[0]:  #non-zero exit status
        print "Failed"
    else:
        print "Success"
    raise
else:
    print "Success"
于 2013-02-18T04:14:30.343 に答える