我试图让 python 删除一些目录,但我得到了访问错误。我认为它的python用户帐户没有权限?
WindowsError: [Error 5] Access is denied: 'path'
是我运行脚本时得到的。
我试过了
shutil.rmtree
os.remove
os.rmdir
他们都返回相同的错误。
我试图让 python 删除一些目录,但我得到了访问错误。我认为它的python用户帐户没有权限?
WindowsError: [Error 5] Access is denied: 'path'
是我运行脚本时得到的。
我试过了
shutil.rmtree
os.remove
os.rmdir
他们都返回相同的错误。
我们在删除 Windows 上的文件和目录时遇到了问题,即使我们刚刚复制了它们,如果它们被设置为“只读”。shutil.rmtree()
为您提供某种异常处理程序来处理这种情况。您调用它并提供如下异常处理程序:
import errno, os, stat, shutil
def handleRemoveReadonly(func, path, exc):
excvalue = exc[1]
if func in (os.rmdir, os.remove) and excvalue.errno == errno.EACCES:
os.chmod(path, stat.S_IRWXU| stat.S_IRWXG| stat.S_IRWXO) # 0777
func(path)
else:
raise
shutil.rmtree(filename, ignore_errors=False, onerror=handleRemoveReadonly)
您可能想尝试一下。
我从未使用过 Python,但我认为它会以任何用户执行脚本的方式运行。
脚本没有特殊用户,它们只是在执行脚本的当前登录用户下运行。
您是否尝试过检查:
你是如何运行脚本的?从交互式控制台会话?如果是这样,只需打开一个 DOS 命令窗口(使用 cmd)并输入“whoami”。那就是您以交互方式运行脚本的人。
好的,我刚才看到了您的编辑...为什么不打印路径并检查属性以查看运行脚本的用户帐户是否具有所需的权限?
如果 whoami 在您的 Windows 版本上不起作用,您可以从命令窗口使用环境变量,如 SET USERNAME 和 SET DOMAINNAME。
@ThomasH:另一块砖墙。
在 unix 系统上,您必须确保父目录也是可写的。这是另一个版本:
def remove_readonly(func, path, exc):
excvalue = exc[1]
if func in (os.rmdir, os.remove) and excvalue.errno == errno.EACCES:
# ensure parent directory is writeable too
pardir = os.path.abspath(os.path.join(path, os.path.pardir))
if not os.access(pardir, os.W_OK):
os.chmod(pardir, stat.S_IRWXU| stat.S_IRWXG| stat.S_IRWXO)
os.chmod(path, stat.S_IRWXU| stat.S_IRWXG| stat.S_IRWXO) # 0777
func(path)
else:
raise
如果脚本作为计划任务运行(这似乎是清理脚本),它可能会作为 SYSTEM 运行。(不明智,但是)可以对目录设置权限,以使 SYSTEM 无权访问。
搜索几个小时后的简单解决方案是首先检查该文件夹是否真的存在!
GIT_DIR="C:/Users/...."
if os.path.exists(GIT_DIR):
shutil.rmtree(GIT_DIR)
这对我有用。