python 有atexit模块来注册函数以在关闭解释器之前运行。这个问题很好地解释了为什么不调用 atexit 。
我想知道ipython
在退出已经运行的东西之前是否可以注册一个函数%run <name>
?理想情况下,我想创建一个装饰器,它可以根据解释器在任一模块中使用寄存器。
感谢 Thomas 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')