Python 使用shutil.rmtree删除目录后,立即使用os.makedirs创建目录时出错

Python 使用shutil.rmtree删除目录后,立即使用os.makedirs创建目录时出错,python,file-access,Python,File Access,在删除一个新的(深度)目录(在本地ssd上)后立即尝试创建该目录时,Python 3.6会在os.makedirs(dirName)行中报告一个PermissionError。 解决此问题的唯一方法是在删除目录后睡眠1秒,然后没有错误。 我是否使用了错误的API,这是Python问题还是其他问题 例如: dirName=“a/b/c” 如果os.path.isdir(dirName): shutil.rmtree(dirName) #时间。睡眠(1) os.makedirs(dirName)

在删除一个新的(深度)目录(在本地ssd上)后立即尝试创建该目录时,Python 3.6会在
os.makedirs(dirName)
行中报告一个
PermissionError
。 解决此问题的唯一方法是在删除目录后睡眠1秒,然后没有错误。 我是否使用了错误的API,这是Python问题还是其他问题

例如:

dirName=“a/b/c”
如果os.path.isdir(dirName):
shutil.rmtree(dirName)
#时间。睡眠(1)
os.makedirs(dirName)
错误:

  File "C:\Program Files\Python37\lib\os.py", line 221, in makedirs
    mkdir(name, mode)
PermissionError: [WinError 5] Access is denied: '...'

  File "C:\Program Files\Python37\lib\os.py", line 221, in makedirs
    mkdir(name, mode)
PermissionError: [WinError 5] Access is denied: '...'

您的代码看起来不错,但是,出现此错误可能有以下几个原因:

  • 在网络驱动器上,必须通过网络同步文件操作,不幸的是,这有时可能会导致此类问题。轻微的延迟(和/或其他重试机制)是一个棘手的解决办法,在这种情况下可能会解决问题

  • 如果目录正在使用,则在相应的应用程序释放资源之前,无法删除该目录。如果在编辑器中打开该目录中的任何文件,则该目录可以被使用。有些应用程序即使关闭了文件也会锁定目录(因此应该关闭应用程序以释放目录)。还请注意,某些后台任务(例如,Tortoise SVN、备份实用程序或病毒扫描程序)可能会临时锁定目录

    请注意,此行为在Windows和Linux之间可能有所不同。在Linux中,如果文件在仍在使用时被删除,则低级文件句柄将保持有效,直到相应的应用程序发布,但文件本身将被重命名为某个临时唯一的长文件名,因此不会出现此问题。Windows的处理方式似乎有所不同


  • 无法在Win10上使用Python 3.7.3 x64复制(也适用于网络驱动器)目录位于本地ssd上drive@doberkofler:您确定这是Python问题吗?也可能与操作系统有关…@MrFuppes我不确定,这就是为什么我想弄清楚我是否正确使用了API,并且这实际上应该可以工作…如果其他进程正在使用该目录,也可能发生这种情况。在这种情况下,目录被“标记为删除”,直到进程释放文件资源。如果关闭所有应用程序,问题是否仍然存在?尤其要注意编辑器、文件探索器、命令shell或执行文件操作的任何后台任务(例如,如果您安装了tortoisesvn)。