【问题标题】:atexit alternative for ipythonipython 的 atexit 替代品
【发布时间】:2016-10-21 23:11:46
【问题描述】:

python 有atexit 模块来注册函数以在关闭解释器之前运行。 This question 很好,为什么不调用 atexit。

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

【问题讨论】:

标签: ipython python-3.5 ipython-magic


【解决方案1】:

感谢 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')

【讨论】:

  • 这很好用。要补充的一件事。 atexit.register 可以接受参数和关键字参数。考虑通过 def exit_register(fun, *args, **kwargs)fun(*args, **kwargs) 更改 exit_register 以允许此操作。
猜你喜欢
  • 1970-01-01
  • 2019-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-08
  • 2012-01-25
  • 2015-08-05
相关资源
最近更新 更多