使用shutil.rmtree和os.mkdir覆盖目录有时会导致访问被拒绝'错误

时间:2018-04-13 04:47:57

标签: python python-3.x shutil

我的代码:

if os.path.exists(myDir):
    shutil.rmtree(myDir)
os.mkdir(myDir)

问题:如果myDir不存在,它总是有效。如果myDir存在,有时它会抛出错误,有时它会起作用。

错误日志:

os.mkdir(myDir)
PermissionError: [WinError 5] Access is denied: 'myDir'

我的猜测:当我调用os.mkdir时,有时shutil.rmtree还没有完成执行/没有释放该目录的权限。因此,错误。

在调用os.mkdir之前,有没有办法确保完全执行shutil.rmtree?

3 个答案:

答案 0 :(得分:2)

所以我遇到了同样的问题。我一直在使用shutil.rmtree之后的暂停。我认为几乎所有导致计算机使用时钟周期的操作都可以。 所有代码:

import os 
import shutil 
import time

dataDir = 'C:/Data/'
if os.path.exists(TEMPDIR):
    shutil.rmtree(TEMPDIR)
time.sleep(.0000000000000001)
os.makedirs(TEMPDIR)

答案 1 :(得分:0)

我在Windows 10上遇到了类似的问题/相同的错误消息,对shutil.rmtree(dir)的调用被拒绝访问,并且随后未执行。这是在我编写的原始备份程序中设计的,旨在删除特定时间段内的备份。我仍在测试以下内容,但到目前为止,它在我的设置中可以作为临时解决方法,但是您的行驶里程可能会有所不同。

以管理员身份运行脚本也无济于事。使用os.chmod(f,S_IWRITE)[和/或stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH | stat.S_IXUSR | stat.S_IRUSR | stat.S_IWUSR | stat.S_IWGRP | stat.S_IXGRP]也被操作系统拒绝。更改受控文件夹访问权限(我怀疑这可能是Windows 10中的某些时候导致此问题),并且修改相应目录上的只读属性也无济于事。更改所有权和在安全选项卡中都没有写访问权限。

我目前使用的解决方法是安装,导入和使用'send2trash'模块,该模块可用于删除目录-假设您的程序听起来不错-没有上述访问错误。

此后,您可以手动或通过自动方式(从win32com.shell导入shell之后)从回收站中删除文件-显然,第二步将删除回收站中的所有文件。因此,在运行此命令之前,请绝对进行检查并考虑一下,否则可能会丢失不需要的数据。...)。

我希望这会有所帮助。

答案 2 :(得分:0)

如果一开始你没有成功...

if os.path.exists(report_path):
while True:
    try:
        shutil.rmtree(report_path)
    except PermissionError:
        print('Damned Win 10 PERMISSION exception, trying again')
        continue
    except FileNotFoundError:
        print('Damned Win 10 FILENOTFOUND exception, ignoring and moving on...')
        break

...如果不起作用,至少有<ctrl> -c