2013-04-16 3 views
1

В Python я могу использовать модуль atexit для регистрации функции, которая будет выполняться при выходе Python. Есть ли способ получить список зарегистрированных обработчиков выходных данных?Как я могу получить список зарегистрированных функций atexit в Python3?

ответ

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 
Смежные вопросы