2013-02-18 90 views
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根據退出狀態使得atexit註冊功能起作用

我也檢查了sys.exitfunc,但這也似乎不支持這?這是不是應該被支持的基本的東西,還是有更好的東西可以用於這些情況。是使用包裝函數退出我的程序的唯一方法?

回答

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實際上是從某個地方的代碼中調用...

你可以或者換你的主要功能在一個嘗試/除了:

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" 
+0

基本上,我想兩個單獨的消息「運行完成成功」和「中止」。因此,在這段代碼中,沒有辦法打印「Run completed successfully」而沒有實際調用sys.exit(0)。 – 2013-02-18 04:23:16

+0

@shadyabhi - 看我的編輯。那是你要的嗎? – mgilson 2013-02-18 04:45:13

+0

感謝您的編輯。爲什麼我們在這裏有兩個「成功」? – 2013-02-18 04:48:44