python有atexit模塊註冊函數在關閉解釋器之前運行。 This question很好,爲什麼不叫atexit。ipython的atexit替代方案
我想知道是否有替代ipython
註冊一個函數之前退出的東西已經運行與%run <name>
?理想情況下,我想根據解釋器創建一個裝飾器,它可以在 模塊中工作寄存器。
python有atexit模塊註冊函數在關閉解釋器之前運行。 This question很好,爲什麼不叫atexit。ipython的atexit替代方案
我想知道是否有替代ipython
註冊一個函數之前退出的東西已經運行與%run <name>
?理想情況下,我想根據解釋器創建一個裝飾器,它可以在 模塊中工作寄存器。
感謝托馬斯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')
這很好用。有一點要補充。 'atexit.register'可以帶參數和關鍵字參數。考慮改變'exit_register'來允許通過:'def exit_register(fun,* args,** kwargs)'和'fun(* args,** kwargs)'。 – JesterEE
@JesterEE。正確的感謝提到它。固定 –
沒有的東西,專門%run'後'火災,但你可以爲[自定義一個魔術](http://ipython.readthedocs.io/:否則這段代碼可能會受益別人en/stable/config/custommagics.html)執行'%run'加一些動作,或者[提供post_run_cell回調](http://ipython.readthedocs.io/en/stable/config/callbacks.html)來運行在每個輸入被執行之後。 –