Ich muss ein Skript entwickeln, das einige Berechnungen starten wird. Ich möchte, dass dieses Skript^C korrekt behandelt, indem es ein temporäres Verzeichnis löscht. Ich habe in der signal_handler mehrere Versionen von Code versucht:Python, Verzeichnis entfernen: Fehler Datei existiert
shutil.rmtree(self.temp)
oder sogar
os.system("rm -rf " + self.temp)
, wenn ich die Ausführung Störe und der Handler aufgerufen wird, das Verzeichnis zu entfernen, erhalte ich Fehler wie:
OSError: [Errno 17] File exists : 'foo'
oder
rm: Unable to remove directory foo: File exists
Nach der Ausführung ist das Verzeichnis, das ich löschen möchte, leer, und ich kann es mit einem rm -r
in der Shell löschen. Allerdings, wenn ich den Code ausführen:
for f in os.listdir(self.temp):
os.remove(os.path.join(self.temp,f))
for f in os.listdir(self.temp):
print f
os.rmdir(self.temp)
Ich bin natürlich, Fehler bekommen, aber die zweite Schleife findet diese Datei: .nfsA13D3
Wer eine Lösung für mein Problem? Vielen Dank!
'.nfs *' Dateien werden erstellt, wenn Sie eine Datei auf einem NFS-Mounten 'rm' verwenden, das noch von etwas verwendet wird. Sobald der Referenzzähler für die '.nfs'-Datei auf 0 fällt, sollte er * verschwinden * (Ich habe Fälle in der Vergangenheit kennengelernt, in denen dies nicht immer der Fall ist, aber eine manuelle Bereinigung erforderlich ist). – twalberg