28.9. atexit
— Manipuladores de Saída¶
Novo na versão 2.0.
Source code: Lib/atexit.py
The atexit
module defines a single function to register cleanup
functions. Functions thus registered are automatically executed upon normal
interpreter termination. atexit
runs these functions in the reverse
order in which they were registered; if you register A
, B
, and C
,
at interpreter termination time they will be run in the order C
, B
,
A
.
Nota: As funções registradas através deste módulo não são invocadas quando o programa é morto por um sinal não tratado pelo Python, quando um erro interno fatal do Python é detectado ou quando a função os._exit()
é invocada.
This is an alternate interface to the functionality provided by the
sys.exitfunc()
variable.
Note: This module is unlikely to work correctly when used with other code that
sets sys.exitfunc
. In particular, other core Python modules are free to use
atexit
without the programmer’s knowledge. Authors who use
sys.exitfunc
should convert their code to use atexit
instead. The
simplest way to convert code that sets sys.exitfunc
is to import
atexit
and register the function that had been bound to sys.exitfunc
.
-
atexit.
register
(func[, *args[, **kwargs]])¶ Registre func como uma função a ser executada no término. Qualquer o argumento opcional que deve ser passado para func for passado como argumento para
register()
. É possível registrar mais ou menos a mesma função e argumentos.Na terminação normal do programa (por exemplo, se
sys.exit()
for chamado ou a execução do módulo principal for concluída), todas as funções registradas serão chamadas por último, pela primeira ordem. A suposição é que os módulos de nível inferior normalmente serão importados antes dos módulos de nível superior e, portanto, devem ser limpos posteriormente.Se uma exceção é levantada durante a execução dos manipuladores de saída, um traceback é impresso (a menos que
SystemExit
seja levantado) e as informações de exceção sejam salvas. Depois de todos os manipuladores de saída terem tido a chance de executar a última exceção a ser levantada, é levantada novamente.Alterado na versão 2.6: This function now returns func, which makes it possible to use it as a decorator.
Ver também
28.9.1. Exemplo do atexit
¶
O exemplo simples a seguir demonstra como um módulo pode inicializar um contador de um arquivo quando ele é importado e salvar automaticamente o valor atualizado do contador quando o programa termina, sem depender que o aplicativo faça uma chamada explícita nesse módulo na finalização.
try:
_count = int(open("counter").read())
except IOError:
_count = 0
def incrcounter(n):
global _count
_count = _count + n
def savecounter():
open("counter", "w").write("%d" % _count)
import atexit
atexit.register(savecounter)
Os argumentos posicional e de palavra-chave também podem ser passados para register()
para ser passada para a função registrada quando é chamada
def goodbye(name, adjective):
print 'Goodbye, %s, it was %s to meet you.' % (name, adjective)
import atexit
atexit.register(goodbye, 'Donny', 'nice')
# or:
atexit.register(goodbye, adjective='nice', name='Donny')
Utilizado como um decorador de função decorator:
import atexit
@atexit.register
def goodbye():
print "You are now leaving the Python sector."
Isso só funciona com funções que podem ser invocadas sem argumentos.