2014-01-21 119 views
14

我想在Python中使用shutil.rmtree刪除一個目錄。問題目錄中包含一個.git控制目錄,該目錄標記爲只讀和隱藏。shutil.rmtree刪除只讀文件

只讀標誌導致rmtree失敗。在Powershell中,我會執行「del -force」強制刪除只讀標誌。 Python中是否有等價物?我真的寧願不走整個樹的兩倍,但onerror參數rmtree似乎並不重試操作,所以我不能使用

def set_rw(operation, name, exc): 
    os.chmod(name, stat.S_IWRITE) 

shutil.rmtree('path', onerror=set_rw) 
+1

您是否嘗試刪除'onerror '回調? –

+0

奇怪的是.git是隻讀的 – wim

+0

我必須在onerror中完成一個完整(遞歸)的rmtree,因爲它是隻讀的.git子目錄,但這可能會起作用。隱藏和只讀模擬unix行爲不顯示dotfiles我認爲行爲是可怕的(hg不這樣做),但我必須忍受它:-( –

回答

20

更多的調查後,出現下列工作:

def del_rw(action, name, exc): 
    os.chmod(name, stat.S_IWRITE) 
    os.remove(name) 
shutil.rmtree(path, onerror=del_rw) 

換句話說,實際上在onerror函數中刪除文件。 (您可能需要檢查onerror處理程序中的目錄,並在這種情況下使用rmdir - 我不需要它,但它可能只是我的問題的具體內容。