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

Cub*_*i73 5 windows rmdir python-3.x

假设以下目录结构:

A
+-- B
|   +-- C
|   |   +-- D
|   |   |   +-- E
Run Code Online (Sandbox Code Playgroud)

其中没有目录包含任何文件(甚至不可见的文件)。跑步

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

在 Python (3.5) 中产生

OSError: [WinError 145] The directory is not empty: '##'
Run Code Online (Sandbox Code Playgroud)

其中##或者是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)
Run Code Online (Sandbox Code Playgroud)

这是一个错误还是os.rmdir应该在删除目录之前不会阻止?

编辑:查看(对于 Windows 上的 CPython 3.5)的源代码os.rmdir我们可以看到它RemoveDirectoryW用于删除。该言论一节的文档RemoveDirectoryW状态

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

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