我正在尝试让python删除一些目录,并且我得到了访问错误。我认为python用户帐户没有权限吗?
WindowsError: [Error 5] Access is denied: 'path'
是我运行脚本时得到的结果 我试过了
shutil.rmtree
os.remove
os.rmdir
他们都返回相同的错误。
答案 0 :(得分:59)
我们在Windows上删除文件和目录时遇到了问题,即使我们刚刚复制它们,如果它们被设置为'readonly'。 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)
您可能想尝试一下。
答案 1 :(得分:3)
我从未使用过Python,但我认为它会像用户执行脚本一样运行。
答案 2 :(得分:2)
脚本没有特殊用户,它们只是在执行脚本的当前登录用户下运行。
您是否尝试过检查:
答案 3 :(得分:0)
你是如何运行脚本的?从交互式控制台会话?如果是这样,只需打开DOS命令窗口(使用cmd)并输入'whoami'。那就是你以交互方式运行脚本的人。
好的,我刚看到你的编辑内容...为什么不打印路径并检查属性以查看运行脚本的用户帐户是否具有所需的权限?
如果whoami在您的Windows版本上不起作用,您可以在命令窗口中使用SET USERNAME和SET DOMAINNAME等环境变量。
答案 4 :(得分:0)
如果脚本作为计划任务运行(似乎可能是清理脚本),它可能会以SYSTEM身份运行。 (不明智的,但是)可以设置目录的权限,以便SYSTEM无法访问。
答案 5 :(得分:0)
目录是否为空,如果不是,那些方法是否支持以递归方式删除目录的内容?
答案 6 :(得分:0)
@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
答案 7 :(得分:-1)
搜索数小时后的简单解决方案是首先检查该文件夹是否确实存在!
GIT_DIR="C:/Users/...."
if os.path.exists(GIT_DIR):
shutil.rmtree(GIT_DIR)
这对我有用。