repo下载Android源码时报 python windowserror 5

WindowsError: [Error 5]

repo sync之后,突然停在了这个地方

Traceback (most recent call last):
  File "E:\LocalProject\Oreo\.repo\repo/main.py", line 538, in <module>
    _Main(sys.argv[1:])
  File "E:\LocalProject\Oreo\.repo\repo/main.py", line 512, in _Main
    result = repo._Run(argv) or 0
  File "E:\LocalProject\Oreo\.repo\repo/main.py", line 185, in _Run
    result = cmd.Execute(copts, cargs)
  File "E:\LocalProject\Oreo\.repo\repo\subcmds\sync.py", line 823, in Execute
    project.Sync_LocalHalf(syncbuf, force_sync=opt.force_sync)
  File "E:\LocalProject\Oreo\.repo\repo\project.py", line 1377, in Sync_LocalHal
    self._CopyAndLinkFiles()
  File "E:\LocalProject\Oreo\.repo\repo\project.py", line 1294, in _CopyAndLinkF
    linkfile._Link()
  File "E:\LocalProject\Oreo\.repo\repo\project.py", line 299, in _Link
    self.__linkIt(self.src_rel_to_dest, self.abs_dest)
  File "E:\LocalProject\Oreo\.repo\repo\project.py", line 279, in __linkIt
    os.remove(absDest)
WindowsError: [Error 5] : u'E:\\LocalProject\\Oreo\\build/core'

看到这个报错我就有点尴尬了。因为这个repo的脚本是由大神改的。完全不懂脚本啊。
修改后的脚本:


  def __linkIt(self, relSrc, absDest):
    # link file if it does not exist or is out of date
    # if not os.path.islink(absDest) or (os.readlink(absDest) != relSrc):
    if not portable.os_path_islink(absDest) or (portable.os_path_realpath(absDest) != relSrc):
      try:
        # remove existing file first, since it might be read-only
        if os.path.lexists(absDest):
          os.remove(absDest)

        else:
          dest_dir = os.path.dirname(absDest)
          if not os.path.isdir(dest_dir):
            os.makedirs(dest_dir)
        # os.symlink(relSrc, absDest)
        portable.os_symlink(relSrc, absDest)
      except IOError:
        _error('Cannot link file %s to %s', relSrc, absDest)

上网查了下,网上的解决方案基本就两种:修改权限和去掉只读属性。

那么是删除权限不够?用管理员
import os
import stat
os.chmod( filename, stat.S_IWRITE )

试了下并不管用。看了下python的sdk文档,发现原因很简单,os.remove(path)是用来删除文件的。但是报错的地方是删除文件夹的快捷方式。看来文件夹的快捷方式不属于文件。删除文件夹要用os.removedirs(path),那做个简单的判断就好了。

  def __linkIt(self, relSrc, absDest):
    # link file if it does not exist or is out of date
    # if not os.path.islink(absDest) or (os.readlink(absDest) != relSrc):
    if not portable.os_path_islink(absDest) or (portable.os_path_realpath(absDest) != relSrc):
      try:
        # remove existing file first, since it might be read-only
        if os.path.lexists(absDest):
            if os.path.isfile(absDest):
                os.remove(absDest)
            else:
                os.removedirs(absDest)
        else:
          dest_dir = os.path.dirname(absDest)
          if not os.path.isdir(dest_dir):
            os.makedirs(dest_dir)
        # os.symlink(relSrc, absDest)
        portable.os_symlink(relSrc, absDest)
      except IOError:
        _error('Cannot link file %s to %s', relSrc, absDest)

拓展阅读

附上 windows error错误代码:

0操作成功完成。
1功能错误。
2系统找不到指定的文件。
3系统找不到指定的路径。
4系统无法打开文件。
5拒绝访问。
6句柄无效。
7存储控制块被损坏。
8存储空间不足,无法处理此命令。
9存储控制块地址无效。
10环境错误。
11试图加载格式错误的程序。
12访问码无效。
13数据无效。
14存储器不足,无法完成此操作。
15系统找不到指定的驱动器。
16无法删除目录。
17系统无法将文件移到不同的驱动器。
18没有更多文件。
19介质受写入保护。
20系统找不到指定的设备。
21设备未就绪。
22设备不识别此命令。
23数据错误(循环冗余检查)。
24程序发出命令,但命令长度不正确。
25驱动器无法找出磁盘上特定区域或磁道的位置。
26无法访问指定的磁盘或软盘。
27驱动器找不到请求的扇区。
28打印机缺纸。
29系统无法写入指定的设备。
30系统无法从指定的设备上读取。
31连到系统上的设备没有发挥作用。
32进程无法访问文件,因为另一个程序正在使用此文件。
33进程无法访问文件,因为另一个程序已锁定文件的一部分。
36用来共享的打开文件过多。
38到达文件结尾。
39磁盘已满。
50不支持网络请求。
51远程计算机不可用。
52在网络上已有重复的名称。
53找不到网络路径。
54网络忙。
55指定的网络资源或设备不再可用。
56已到达网络BIOS命令限制。
57网络适配器硬件出错。
58指定的服务器无法运行请求的操作。
59发生意外的网络错误。
60远程适配器不兼容。
61打印机队列已满。
62无法在服务器上获得用于保存待打印文件的空间。
63删除等候打印的文件。
64指定的网络名不再可用。
65拒绝网络访问。
66网络资源类型错误。
67找不到网络名。
68超过本地计算机网卡的名称限制。
69超出网络BIOS会话限制。
70远程服务器已暂停,或正在启动过程中。
71当前已无法再同此远程计算机连接,因为已达到计算机的连接数目极限。
72已暂停指定的打印机或磁盘设备。
80文件存在。
82无法创建目录或文件。
83INT24失败。
84无法取得处理此请求的存储空间。
85本地设备名已在使用中。
86指定的网络密码错误。
87参数错误。
88网络上发生写入错误。
89系统无法在此时启动另一个进程。
100无法创建另一个系统信号灯。
101另一个进程拥有独占的信号灯。
102已设置信号灯且无法关闭。
103无法再设置信号灯。
104无法在中断时请求独占的信号灯。
105此信号灯的前一个所有权已结束。
107程序停止,因为替代的软盘未插入。
108磁盘在使用中,或被另一个进程锁定。
109管道已结束。
110系统无法打开指定的设备或文件。
111文件名太长。
112磁盘空间不足。
113无法再获得内部文件的标识。
114目标内部文件的标识不正确。
117应用程序制作的IOCTL调用错误。
118验证写入的切换参数值错误。
119系统不支持请求的命令。
120此功能只被此系统支持。
121信号灯超时时间已到。
122传递到系统调用的数据区太小。
123文件名、目录名或卷标语法不正确。
124系统调用级别错误。
125磁盘没有卷标。
126找不到指定的模块。
127找不到指定的程序。
128没有等候的子进程。
130试图使用操作(而非原始磁盘I/O)的已打开磁盘分区的文件句柄。
131试图移动文件指针到文件开头之前。
132无法在指定的设备或文件上设置文件指针。
133包含先前加入驱动器的驱动器无法使用JOIN或SUBST命令。
134试图在已被合并的驱动器上使用JOIN或SUBST命令。
135试图在已被合并的驱动器上使用JOIN或SUBST命令。
136系统试图解除未合并驱动器的JOIN。
137系统试图解除未替代驱动器的SUBST。
138系统试图将驱动器合并到合并驱动器上的目录。
139系统试图将驱动器替代为替代驱动器上的目录。
140系统试图将驱动器合并到替代驱动器上的目录。
141系统试图替代驱动器为合并驱动器上的目录。
142系统无法在此时运行JOIN或SUBST。
143系统无法将驱动器合并到或替代为相同驱动器上的目录。
144目录并非根目录下的子目录。
145目录非空。
146指定的路径已在替代中使用。
147资源不足,无法处理此命令。
148指定的路径无法在此时使用。
149企图将驱动器合并或替代为驱动器上目录是上一个替代的目标的驱动器。
150系统跟踪信息未在CONFIG.SYS文件中指定,或不允许跟踪。
151为DosMuxSemWait指定的信号灯事件个数错误。
152DosMuxSemWait不可运行。已设置过多的信号灯。
153DosMuxSemWait清单错误。
154输入的卷标超过目标文件系统的长度限制155无法创建另一个线程。
156接收进程已拒绝此信号。
157段已被放弃且无法锁定。
158段已解除锁定。
159线程标识的地址错误。
160传递到DosExecPgm的参数字符串错误。
161指定的路径无效。
162信号已暂停。
164无法在系统中创建更多的线程。
167无法锁定文件区域。
170请求的资源在使用中。
173对于提供取消区域进行锁定的请求不明显。
174文件系统不支持锁定类型的最小单元更改。
180系统检测出错误的段号。
183当文件已存在时,无法创建该文件。
186传递的标志错误。
187找不到指定的系统信号灯名称。
196操作系统无法运行此应用程序。
197操作系统当前的配置不能运行此应用程序。
199操作系统无法运行此应用程序。
200代码段不可大于或等于64K。
203操作系统找不到已输入的环境选项。
205命令子树中的进程没有信号处理程序。
206文件名或扩展名太长。
207第2环堆栈已被占用。
208没有正确输入文件名通配符*或?,或指定过多的文件名通配符。
209正在发送的信号错误。
210无法设置信号处理程序。
212段已锁定且无法重新分配。
214连到该程序或动态链接模块的动态链接模块太多。
215无法嵌套调用LoadModule。
230管道状态无效。
231所有的管道实例都在使用中。
232管道正在关闭中。
233管道的另一端上无任何进程。
234更多数据可用。
240取消会话。
254指定的扩展属性名无效。
255扩展属性不一致。
258等待的操作过时。
259没有可用的数据了。
266无法使用复制功能。
267目录名无效。
275扩展属性在缓冲区中不适用。
276装在文件系统上的扩展属性文件已损坏。
277扩展属性表格文件已满。
278指定的扩展属性句柄无效。
282装入的文件系统不支持扩展属性。
288企图释放并非呼叫方所拥有的多用户终端运行程序。
298发向信号灯的请求过多。
299仅完成部分的ReadProcessMemoty或WriteProcessMemory请求。
300操作锁定请求被拒绝。
301系统接收了一个无效的操作锁定确认。
487试图访问无效的地址。
534算术结果超过32位。
535管道的另一端有一进程。
536等候打开管道另一端的进程。
994拒绝访问扩展属性。
995由于线程退出或应用程序请求,已放弃I/O操作。
996重叠I/O事件不在信号状态中。
997重叠I/O操作在进行中。
998内存分配访问无效。
999错误运行页内操作。

参考链接

python windows错误代码 5 https://blog.csdn.net/thesnow...
Python 删除操作出现WindowsError: [Error 5] 解决方案 https://www.waitig.com/python...
Python OS 文件/目录方法 http://www.runoob.com/python/...


博客和专栏有什么区别啊
记录自己想不开的岁月

讨厌版权!模仿,人类进步的阶梯!

18 声望
2 粉丝
0 条评论
推荐阅读
从AndroidStudio的启动参数开始,了解一下JVM的一些东西(内存使用,JIT等)
从AndroidStudio的启动参数了解到的下JVM的一些东西(内存使用,JIT等)如果你使用AndroidStudio经常觉得很卡,那有可能是因为系统给AS分配的内存不够的原因。打开/Applications/Android Studio.app/Contents/bin...

杨锘阅读 2.1k

Android-博客及公众号推荐
首先强烈的推荐 stormzhang的博客,一直在关注他的博客和公众号,对我影响很大,不仅仅是Android学习之路,而且还是还会分享一些Android或者人生的经验,我也是一步步靠自己走过来,还在继续努力中。看stormzhang...

秦子帅2阅读 3.9k

如何用3D流体实现逼真水流效果?
华为应用市场在2022年HDC大会期间发布了一款3D水流主题,基于华为HMS Core Scene Kit服务能力,展现立体灵动的水流岛屿,可跟随用户指尖实现实时流体波动效果,既趣味又解压。

HMSCore1阅读 2k

python里打印list的四种方法
原文链接标题:Print lists in Python (4 Different Ways)用for循环来打印 {代码...} 结果1 2 3 4 5用 * 星号来打印 {代码...} 结果 {代码...} 把list转换为str来打印 {代码...} 结果 {代码...} 用map把数组里非...

chiiinnn阅读 10.3k

封面图
Ubuntu20.04 从源代码编译安装 python3.10
Ubuntu 22.04 Release DateUbuntu 22.04 Jammy Jellyfish is scheduled for release on April 21, 2022If you’re ready to use Ubuntu 22.04 Jammy Jellyfish, you can either upgrade your current Ubuntu syste...

ponponon1阅读 4k评论 1

Android开发 - 掌握ConstraintLayout(一)传统布局的问题
在传统的Android开发中,页面布局占用了我们很多的开发时间,而且面对复杂页面的时候,传统的一些布局会显得非常复杂,每种布局都有特定的应用场景,我们通常需要各种布局结合起来使用来实现复杂的页面。随着Cons...

罗伊德1阅读 2.4k

日常Python 代码片段整理
1、简单的 HTTP Web 服务器 {代码...} 2、单行循环List {代码...} 3、更新字典 {代码...} 4、拆分多行字符串 {代码...} 5、跟踪列表中元素的频率 {代码...} 6、不使用 Pandas 读取 CSV 文件 {代码...} 7、将列表...

墨城2阅读 301

讨厌版权!模仿,人类进步的阶梯!

18 声望
2 粉丝
宣传栏