`os.rmdir`没有在空目录上工作?

时间:2017-09-11 13:54:59

标签: windows python-3.x 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,但手动执行每个函数不会产生此异常。我知道有shutil.rmtree,但os.rmdir的文档清楚地说明了

  

删除(删除)目录路径。 仅在目录为空时才有效,否则会引发OSError。为了删除整个目录树,可以使用shutil.rmtree()

似乎并非如此,至少在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的{​​{3}}(对于Windows上的CPython 3.5),我们可以看到RemoveDirectoryW用于删除。 RemoveDirectoryW个州the source备注部分

  

RemoveDirectory函数在关闭时标记要删除的目录。因此,在关闭目录的最后一个句柄之前,不会删除该目录。

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

0 个答案:

没有答案