atexit– 退出处理程序


atexit模块定义了注册和取消注册清理功能的功能。这样注册的功能在正常解释器终止时自动执行。atexit按照reverse的顺序运行这些功能;如果你注册A, BC,在翻译终止时间它们将按顺序运行C, B,A.

注意:通过这个模块注册的功能是当程序被Python未处理的信号杀死时,当检测到Python致命内部错误,或者os._exit()调用时,没有调用.

更改版本3.7:当与C-API子解释器一起使用时,注册的函数在它们注册的解释器的本地.

atexit.register (func, *args, **kwargs

注册func作为函数在终止时执行。任何要传递给func的选项都必须作为参数传递给register()。可以多次注册相同的功能和参数.

正常的程序终止(例如,如果sys.exit()被称为主模块的执行完成),所有注册的函数都被称为inlast in,first out order。假设较低级别的模块通常会在更高级别的模块之前导入,因此必须在上层清理.

如果在执行退出处理程序期间引发异常,则会打印回溯(除非SystemExit被提出)并且异常信息被保存。在所有退出处理程序都有机会运行最后一个异常之后,重新启动了

这个函数返回func,这使得它可以用作装饰器.

atexit.unregister(func)

从解释器关闭时运行的函数列表中删除func。打电话给unregister(), func保证在解释器关闭时不会被调用,即使它被注册了不止一次。unregister()如果func以前没有注册过

也可以看看

模块readline
atexit读取和写入readline historyfiles.

atexit示例

以下简单示例演示了模块在导入时如何从文件初始化计数器并自动保存计数器的更新值程序终止而不依赖于应用程序制作在终止时对该模块的显式调用.

try:    with open("counterfile") as infile:        _count = int(infile.read())except FileNotFoundError:    _count = 0def incrcounter(n):    global _count    _count = _count + ndef savecounter():    with open("counterfile", "w") as outfile:        outfile.write("%d" % _count)import atexitatexit.register(savecounter)

调用它时,也可以将位置和关键字参数传递给register()以绕过注册函数:

def goodbye(name, adjective):    print("Goodbye, %s, it was %s to meet you." % (name, adjective))import atexitatexit.register(goodbye, "Donny", "nice")# or:atexit.register(goodbye, adjective="nice", name="Donny")

用作装饰器

import [email protected] goodbye():    print("You are now leaving the Python sector.")

这只适用于可以不带参数调用的函数.

评论被关闭。