我想有python删除某些目录和我访问的错误。我认为,蟒蛇的用户帐户没有权利?

WindowsError: [Error 5] Access is denied: 'path'

为什么我得到我的脚本。
我已经试过了

shutil.rmtree  
os.remove  
os.rmdir

他们所有的返回同样的错误。

有帮助吗?

解决方案

我们在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)

您可能想尝试一下。

其他提示

我从未使用过Python,但我认为它会像用户执行脚本一样运行。

脚本没有特殊的用户,他们只是下运行的前登录用户其执行的脚本。

你有没有尝试过检查:

  • 你正试图删除有效途径?那
  • 道路已经没有上锁的文件?

如果脚本作为计划任务运行(似乎可能是清理脚本),它可能会以SYSTEM身份运行。 (不明智的,但是)可以设置目录的权限,以便SYSTEM无法访问。

目录是否为空,如果不是,那些方法是否支持以递归方式删除目录的内容?

你是如何运行脚本的?从交互式控制台会话?如果是这样,只需打开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

搜索数小时后的简单解决方案是首先检查该文件夹是否确实存在!

GIT_DIR="C:/Users/...."
if os.path.exists(GIT_DIR):
    shutil.rmtree(GIT_DIR)

这对我有用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top