用 shutil.rmtree 和 os.mkdir 覆盖目录有时会出现 'Access is denied' 错误
Overwrite directory with shutil.rmtree and os.mkdir sometimes gives 'Access is denied' error
我的代码:
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的完整执行吗?
我在 Windows10 上遇到了类似的问题/相同的错误消息,调用 shutil.rmtree(dir) 被拒绝访问,随后未被执行。这是我编写的原始备份程序,旨在删除超过特定时间的备份。我仍在测试以下内容,但到目前为止,它在我的设置中用作临时解决方法,但您的里程可能会有所不同。
运行 作为管理员的脚本也没有帮助。使用 os.chmod(f, S_IWRITE) [and/or stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH | stat.S_IXUSR | stat.S_IRUSR | stat.S_IWUSR | stat.S_IWGRP | stat.S_IXGRP] 也被 OS 拒绝了。更改受控文件夹访问(我怀疑这可能是 Windows 10 中某些时候造成的)以及修改相应目录的只读属性也无济于事。在安全选项卡中更改所有权和写入权限都没有帮助。
我目前使用的解决方法是安装、导入和使用 'send2trash' 模块,该模块可用于删除目录 - 假设您的程序在其他方面是正确的 - 没有上述访问错误。
此后可以手动或通过自动方式从回收站中删除文件(在从 win32com.shell 导入 shell 之后)- 显然,第二步将从回收站中删除所有文件.所以在你 运行 之前绝对检查并思考这个,否则你可能会丢失你不想丢失的数据......)。
希望对您有所帮助。
所以我遇到了同样的问题。我一直在使用的是 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
我的代码:
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的完整执行吗?
我在 Windows10 上遇到了类似的问题/相同的错误消息,调用 shutil.rmtree(dir) 被拒绝访问,随后未被执行。这是我编写的原始备份程序,旨在删除超过特定时间的备份。我仍在测试以下内容,但到目前为止,它在我的设置中用作临时解决方法,但您的里程可能会有所不同。
运行 作为管理员的脚本也没有帮助。使用 os.chmod(f, S_IWRITE) [and/or stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH | stat.S_IXUSR | stat.S_IRUSR | stat.S_IWUSR | stat.S_IWGRP | stat.S_IXGRP] 也被 OS 拒绝了。更改受控文件夹访问(我怀疑这可能是 Windows 10 中某些时候造成的)以及修改相应目录的只读属性也无济于事。在安全选项卡中更改所有权和写入权限都没有帮助。
我目前使用的解决方法是安装、导入和使用 'send2trash' 模块,该模块可用于删除目录 - 假设您的程序在其他方面是正确的 - 没有上述访问错误。
此后可以手动或通过自动方式从回收站中删除文件(在从 win32com.shell 导入 shell 之后)- 显然,第二步将从回收站中删除所有文件.所以在你 运行 之前绝对检查并思考这个,否则你可能会丢失你不想丢失的数据......)。
希望对您有所帮助。
所以我遇到了同样的问题。我一直在使用的是 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