`os.rmdir`不能在空目录下工作?

假设以下目录结构:

A +-- B | +-- C | | +-- D | | | +-- E 

没有目录包含任何文件(甚至不可见的文件)。 运行

 os.rmdir("A/B/C/D/E"); os.rmdir("A/B/C/D"); os.rmdir("A/B/C"); os.rmdir("A/B"); os.rmdir("A") 

在Python(3.5)产量

 OSError: [WinError 145] The directory is not empty: '##' 

其中##ABCD ,但手动执行每个函数不会产生此exception。 我知道有shutil.rmtree ,但shutil.rmtree的文档明确指出

删除(删除)目录path。 仅当目录为空时才起作用 ,否则引发OSError 。 为了移除整个目录树,可以使用shutil.rmtree()

这似乎并不是这种情况,至less在Windows系统上。 我发现迄今唯一的解决方法(不包括shutil.rmtree )是

 def rm (dir_path): while len(os.listdir(dir_path)) > 0: pass # Maybe include timeout here to not lock the program os.rmdir(dir_path) 

这是一个错误或是os.rmdir应该不会阻止,直到目录被删除?

编辑:看看os.rmdir (在Windows上的CPython 3.5) 的来源 ,我们可以看到, RemoveDirectoryW用于删除。 RemoveDirectoryW 文档的注释部分

RemoveDirectory函数在closures时标记要删除的目录。 因此,直到该目录的最后一个句柄closures,该目录才被删除。

即使我试图确保目录没有句柄,我认为这可能实际上是问题(感谢@armatita的提示)。