Estoy trabajando con un directorio temporal y quiero asegurarme de que se elimine al cerrar el programa (independientemente de si el programa fue exitoso). Estoy usando tempfile.mkdtemp
para crear el directorio y poner la cadena que se crea en una subclase de str
que elimina el directorio en su __del__
comando:¿Cómo se gestiona un directorio temporal de modo que se garantice su eliminación al cerrar el programa?
import shutil
import tempfile
class TempDir(str):
""" container for temporary directory.
Deletes directory when garbage collected/zero references """
def __del__(self):
shutil.rmtree(self.__str__(), onerror=my_error_fn)
dbdir = TempDir(tempfile.mkdtemp())
Esto es lo que no estoy seguro acerca de: si el programa se cierra o se si ocurriera un KeyboardInterrupt, ¿Python automáticamente eliminará/recolectará todas las variables? Si no, ¿cómo puedo asegurarme de que el directorio se elimine?
Información relacionada sobre creating destructor methods in Python. Parece que mientras el objeto TempDir no haga referencia a nada más, usar __del__
para destruirlo debería estar bien.
¿Qué has encontrado cuando lo has probado? ¿'__del__' se ejecuta cada vez que Ctrl + C? –
bien, acabo de agregar los resultados de mis pruebas, ¡muchas gracias por la sugerencia de @JoelCornett! –
Considere usar el módulo 'atexit' además de' __del__'. – martineau