WindowsError: [Error 5]
repo sync之後,突然停在了這個地方
Traceback (most recent call last):
File "E:LocalProjectOreo.repo
epo/main.py", line 538, in <module>
_Main(sys.argv[1:])
File "E:LocalProjectOreo.repo
epo/main.py", line 512, in _Main
result = repo._Run(argv) or 0
File "E:LocalProjectOreo.repo
epo/main.py", line 185, in _Run
result = cmd.Execute(copts, cargs)
File "E:LocalProjectOreo.repo
eposubcmdssync.py", line 823, in Execute
project.Sync_LocalHalf(syncbuf, force_sync=opt.force_sync)
File "E:LocalProjectOreo.repo
epoproject.py", line 1377, in Sync_LocalHal
self._CopyAndLinkFiles()
File "E:LocalProjectOreo.repo
epoproject.py", line 1294, in _CopyAndLinkF
linkfile._Link()
File "E:LocalProjectOreo.repo
epoproject.py", line 299, in _Link
self.__linkIt(self.src_rel_to_dest, self.abs_dest)
File "E:LocalProjectOreo.repo
epoproject.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/…