使用 shutil.rmtree 和 os.mkdir 覆盖目录有时会出错'Access is denied'



我的代码:

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?

所以我遇到了同样的问题。我一直在使用的是在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)

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

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

。如果这不起作用,至少还有<ctrl> -c

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

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

我目前使用的解决方法是安装,导入和使用" send2trash"模块,该模块可用于删除目录 - 假设您的程序在其他方面是合理的 - 没有上述访问错误。

此后,可以通过手动或自动方式(从win32com.shell导入shell后)从回收站中删除文件 - 显然,第二步将从回收站中删除所有文件。因此,在运行此内容之前,请务必检查并思考,否则您可能会丢失您不想丢失的数据......

我希望这是有帮助的。

相关内容

最新更新