Ich arbeite mit einem temporären Verzeichnis und ich möchte sicherstellen, dass es beim Schließen des Programms gelöscht wird (unabhängig davon, ob das Programm erfolgreich war). Ich verwende tempfile.mkdtemp
das Verzeichnis zu erstellen und setzen Sie die Zeichenfolge, die in eine Unterklasse von str
erstellt wird, der das Verzeichnis auf seinem __del__
Befehl löscht:Wie verwalten Sie ein temporäres Verzeichnis, so dass es beim Schließen des Programms garantiert gelöscht wird?
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())
Hier ist, was ich bin mir nicht sicher: wenn das Programm geschlossen oder ein KeyboardInterrupt passiert, wird Python automatisch alle Variablen löschen/abräumen? Wenn nicht, wie kann ich sicherstellen, dass das Verzeichnis gelöscht wird?
Verwandte Informationen über creating destructor methods in Python. Scheint so lange, wie das TempDir-Objekt nichts anderes referenziert, mit __del__
zu zerstören, sollte es in Ordnung sein.
Was haben Sie gefunden, als Sie es getestet haben? Wird '__del__' jedes Mal ausgeführt, wenn Sie Strg + C drücken? –
Okay, ich habe nur die Ergebnisse meiner Tests hinzugefügt - vielen Dank für den Vorschlag @JoelCornett! –
Verwenden Sie das 'atexit'-Modul zusätzlich zu' __del__'. – martineau