2

python 有atexit模块来注册函数以在关闭解释器之前运行。这个问题很好地解释了为什么不调用 atexit 。

我想知道ipython在退出已经运行的东西之前是否可以注册一个函数%run <name>?理想情况下,我想创建一个装饰器,它可以根据解释器在任一模块中使用寄存器。

4

1 回答 1

4

感谢 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')
于 2016-10-24T15:50:21.813 回答