Python,删除目录:错误文件存在

Gui*_*Erb 5 python unix python-2.4

我需要开发一个可以启动一些计算的脚本.希望此脚本通过删除一些临时目录来正确处理^ C. 我在signal_handler中尝试了几个版本的代码:

shutil.rmtree(self.temp)
Run Code Online (Sandbox Code Playgroud)

甚至

os.system("rm -rf " + self.temp)
Run Code Online (Sandbox Code Playgroud)

当我中断执行并调用处理程序删除目录时,我收到的错误如下:

OSError: [Errno 17] File exists : 'foo' 
Run Code Online (Sandbox Code Playgroud)

要么

rm: Unable to remove directory foo: File exists
Run Code Online (Sandbox Code Playgroud)

执行后,我要删除的目录为空,我可以rm -r在shell中删除它.但是,如果我执行代码:

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)
Run Code Online (Sandbox Code Playgroud)

我当然得到错误,但第二个循环找到这个文件: .nfsA13D3

有人解决我的问题吗?谢谢 !

Ste*_*ini 7

这是nfs挂载文件系统的一个众所周知的问题,并且您的一些实用程序没有关闭文件.即使删除文件,操作系统也可以使文件保持活动状态,但是当涉及到nfs时,这是不可能的.os的解决方案是创建临时的.nfs文件并保留它直到文件描述符正在使用.

这个问题没有真正的解决方案.当最后一个描述符关闭时,.nfs文件将消失,但(空)目录仍将存在.唯一可能的解决方法是找到仍然打开的文件描述符并将其关闭,但这取决于它是否在您的程序中.就我而言,它是在一个外部的编译库中,我没有机会找到泄漏的地方.


Gui*_*Erb 0

谢谢您的评论,我正在用 python 代码打开文件,而我的 signal_handler 没有检查我的文件对象是否已关闭。这就是为什么我无法删除脚本中包含这些文件的目录的原因。