2013-04-16 30 views

回答

3

在Python 2,当模块仍可作为一个专用的Python中,atexit模块有一个半私有列表:

atexit._exithandlers 

持有所有已注册的退出处理。

在Python 3中,模块已被重新编码为C,并且列表不再可访问,所以对于Python 3,您恐怕平平无奇。

您必须将Python 2 pure-python version移植到Python 3,并确保使用它来代替C版本,以使列表再次可访问。

+0

你可以,然而,在调用库函数之前,将“atexit”模块用于保存自己的处理程序列表。 – kindall

+0

@ kindall:不,你不能。它是一个C模块,那些不能被猴子修补。 –

+1

当然你可以,你只需要替换'sys.modules'中的整个模块。这很简单,因为模块中只有两个功能。 – kindall

0

在Python 3,atexit._exithandlers列表不可用,但如果你只需要算注册的回调,你可以这样做:

atexit._ncallbacks() 

演示:

# python3 
Python 3.5.3rc1 (default, Jan 3 2017, 04:40:57) 
[GCC 6.3.0 20161229] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import atexit 
>>> atexit._ncallbacks() 
2 
相关问题