2013-04-16 29 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 
相關問題