2016-10-21 60 views
2

python有atexit模塊註冊函數在關閉解釋器之前運行。 This question很好,爲什麼不叫atexit。ipython的atexit替代方案

我想知道是否有替代ipython註冊一個函數之前退出的東西已經運行與%run <name>?理想情況下,我想根據解釋器創建一個裝飾器,它可以在 模塊中工作寄存器。

+1

沒有的東西,專門%run'後'火災,但你可以爲[自定義一個魔術](http://ipython.readthedocs.io/:否則這段代碼可能會受益別人en/stable/config/custommagics.html)執行'%run'加一些動作,或者[提供post_run_cell回調](http://ipython.readthedocs.io/en/stable/config/callbacks.html)來運行在每個輸入被執行之後。 –

回答

2

感謝托馬斯K爲好評。如果他寫了一個答案,我會接受他的。

# exit_register runs at the end of ipython %run or the end of the python interpreter 
try: 
    def exit_register(fun, *args, **kwargs): 
     """ Decorator that registers at post_execute. After its execution it 
     unregisters itself for subsequent runs. """ 
     def callback(): 
      fun() 
      ip.events.unregister('post_execute', callback) 
     ip.events.register('post_execute', callback) 


    ip = get_ipython() 
except NameError: 
    from atexit import register as exit_register 


@exit_register 
def callback(): 
    print('I\'m done!') 


print('Running') 
+1

這很好用。有一點要補充。 'atexit.register'可以帶參數和關鍵字參數。考慮改變'exit_register'來允許通過:'def exit_register(fun,* args,** kwargs)'和'fun(* args,** kwargs)'。 – JesterEE

+0

@JesterEE。正確的感謝提到它。固定 –