当前位置: 首页 > 面试题库 >

在Windows上,shutil.rmtree失败,显示“访问被拒绝”

郎琪
2023-03-14
问题内容

在Python中,当shutil.rmtree在包含只读文件的文件夹上运行时,将显示以下异常:

 File "C:\Python26\lib\shutil.py", line 216, in rmtree
   rmtree(fullname, ignore_errors, onerror)
 File "C:\Python26\lib\shutil.py", line 216, in rmtree
   rmtree(fullname, ignore_errors, onerror)
 File "C:\Python26\lib\shutil.py", line 216, in rmtree
   rmtree(fullname, ignore_errors, onerror)
 File "C:\Python26\lib\shutil.py", line 216, in rmtree
   rmtree(fullname, ignore_errors, onerror)
 File "C:\Python26\lib\shutil.py", line 216, in rmtree
   rmtree(fullname, ignore_errors, onerror)
 File "C:\Python26\lib\shutil.py", line 216, in rmtree
   rmtree(fullname, ignore_errors, onerror)
 File "C:\Python26\lib\shutil.py", line 216, in rmtree
   rmtree(fullname, ignore_errors, onerror)
 File "C:\Python26\lib\shutil.py", line 221, in rmtree
   onerror(os.remove, fullname, sys.exc_info())
 File "C:\Python26\lib\shutil.py", line 219, in rmtree
   os.remove(fullname)
WindowsError: [Error 5] Access is denied: 'build\\tcl\\tcl8.5\\msgs\\af.msg'

在“文件属性”对话框中查看时,我注意到该af.msg文件被设置为只读。

所以问题是:解决这个问题的 最简单的 解决方法/解决方案是什么-鉴于我的意图是rm -rf build/在Windows上做等效的事情?(无需使用诸如unxutils或cygwin之类的第三方工具-因为此代码的目标是在安装了Python2.6和PyWin32的裸机上运行)


问题答案:

检查以下问题:

python脚本在Windows中以什么用户身份运行?

显然,答案是将文件/文件夹更改为非只读,然后将其删除。

这是@Sridhar
Ratnakumar在评论中提到的onerror()处理程序pathutils.py

def onerror(func, path, exc_info):
    """
    Error handler for ``shutil.rmtree``.

    If the error is due to an access error (read only file)
    it attempts to add write permission and then retries.

    If the error is for another reason it re-raises the error.

    Usage : ``shutil.rmtree(path, onerror=onerror)``
    """
    import stat
    if not os.access(path, os.W_OK):
        # Is the error an access error ?
        os.chmod(path, stat.S_IWUSR)
        func(path)
    else:
        raise


 类似资料:
  • 问题内容: 我创建了两个Java文件:和。 我尝试在命令提示符下使用javac编译代码,如下所示: 我正在访问被拒绝错误: 我在做什么导致此错误? 问题答案: 您似乎正在尝试将源文件放在系统目录中。尝试为您的源文件创建自己的目录(在您自己的主目录下),而不是将它们放在系统路径中。您可能没有写该目录的权限(但我不确定您如何将源文件保存在该目录中)。

  • 我试图在我的Windows10笔记本电脑上的Spark V2.0.0集群上执行一个程序。端口31080上有一个主节点,端口32080上有一个从节点。集群使用独立管理器,并使用JDK1.8,从服务器有一个自定义工作目录。 当通过spark-submit或Eclipse>Run程序提交程序时,我会得到以下错误,执行器进入一个循环(创建了一个新的执行器,并且连续失败)。请引导。 请求删除执行人0

  • 我们已经使用部署扫描程序(“部署”文件夹)将WAR文件部署到Wildfly。web应用程序一直工作到计算机重新启动为止-当服务器再次加载web应用程序时,它会失败。值得一提的是,如果重新启动Wildfly服务,我们就不会有这个问题,它只会在整个操作系统重新启动时发生。如果我重新启动Wildfly,它会再次工作。 如果从部署文件夹中删除失败的文件标志(healthsafety-server.war.

  • 昨天我在编码,当我做提交到一个回购,我不能这样做,因为,gitlab给我发送了两个消息。 这条消息出现在我试图promise的时刻 null

  • 我正在尝试使用Angular2和Http POST对SOAP web服务进行一个非常简单的调用。如果我使用POSTMAN发布相同的消息,只需将内容类型设置为text/xml即可。 对于Angular2,我得到了以下错误:- SEC7120:原点http://localhost:3004在Access Control Allow Origin标头中找不到 SCRIPT7002: XMLHttpReq

  • 我在Windows 10 Pro x64上使用GitLab Community Edition 9.1.3 2E4E522。使用Git客户端。