Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在运行copytree之前,是否有一种简单的方法让系统有足够的时间删除文件夹_Python_Windows_Shutil - Fatal编程技术网

Python 在运行copytree之前,是否有一种简单的方法让系统有足够的时间删除文件夹

Python 在运行copytree之前,是否有一种简单的方法让系统有足够的时间删除文件夹,python,windows,shutil,Python,Windows,Shutil,我有一些需要更新的目录,我使用了以下代码 for newdir in newdirs: olddir = newdir.replace('h:\\','G:\\').replace('_academic','') shutil.rmtree(newdir) shutil.copytree(olddir,newdir) 我偶尔会出错 WindowsError: [Error 5] Access is denied: 'h:\\mydir\\sub1\\sub2\\sub3

我有一些需要更新的目录,我使用了以下代码

for newdir in newdirs:
    olddir = newdir.replace('h:\\','G:\\').replace('_academic','')
    shutil.rmtree(newdir)
    shutil.copytree(olddir,newdir)
我偶尔会出错

WindowsError: [Error 5] Access is denied: 'h:\\mydir\\sub1\\sub2\\sub3\\sub4\\sub5'
由于错误不会发生在以前的目录上,我决定原因一定是访问冲突-rmtree调用和copytree之间发生的时间太少,所以我修改了代码以浪费一些时间

for newdir in newdirs:
    olddir = newdir.replace('h:\\','G:\\').replace('_academic','')
    shutil.rmtree(newdir)
    for item in range(0,20,1):
        pass
    shutil.copytree(olddir,newdir)
这使错误消失,旧目录被复制到新位置

我不喜欢这个,因为它看起来很摇摇欲坠——即使对我来说也是如此

  • 我对错误原因(冲突)的理解是否错误
  • 在开始复制树之前,是否有更好的方法确保系统有足够的时间完成rmtree操作

  • 如果在您等待时错误消失了,您可能没有弄错原因。因此,继续等待的想法,但有目的地等待,这可能会稍微好一点:

    如果发生了一些奇怪的错误,阻止删除目录,但没有引发异常,那么
    while
    循环理论上可能会永远运行下去,但我发现这种可能性非常小


    我一点也不为这个解决方案感到骄傲,但是除非有新的知识,否则这应该比任意的延迟更简单。

    我喜欢这个,因为你完全正确,有目的地等待,而不是随机计数。谢谢你的建议。
    for newdir in newdirs:
        olddir = newdir.replace('h:\\','G:\\').replace('_academic','')
        shutil.rmtree(newdir)
        while os.path.exists(newdir): # check if it exists
            pass
        shutil.copytree(olddir,newdir)