Necesito desarrollar un script que inicie algunos cálculos. A quiere que este script maneje^C correctamente eliminando algún directorio temporal. He intentado varias versiones de código en el signal_handler:Python, directorio eliminar: existe el archivo de error
shutil.rmtree(self.temp)
o incluso
os.system("rm -rf " + self.temp)
cuando estoy interrumpiendo la ejecución y se llamará al controlador para eliminar el directorio, que estoy recibiendo errores como:
OSError: [Errno 17] File exists : 'foo'
o
rm: Unable to remove directory foo: File exists
Después de la ejecución, el directorio que quiero eliminar está vacío, y puedo eliminarlo con un rm -r
en el shell. Sin embargo, si ejecuto el código:
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)
estoy, por supuesto, conseguir de errores, pero el segundo bucle encuentra este archivo: .nfsA13D3
Alguien tiene una solución a mi problema? ¡Gracias!
'.nfs *' los archivos se crean cuando 'rm' es un archivo en un montaje NFS que todavía está siendo utilizado por algo. Una vez que el recuento de referencias en el archivo '.nfs' cae a 0, * debe * desaparecer (me he encontrado casos en el pasado donde no siempre, sin embargo, requiere limpieza manual). – twalberg