2014-01-21 3 views
14

shutil.rmtree을 Python에서 사용하여 디렉토리를 제거하고 싶습니다. 문제의 디렉토리는 .git 제어 디렉토리를 포함하며, git은 읽기 전용으로 표시되고 숨겨집니다.shutil.rmtree 읽기 전용 파일을 제거합니다

읽기 전용 플래그로 인해 rmtree이 실패합니다. Powershell에서는 "del -force"를 사용하여 읽기 전용 플래그를 강제로 제거합니다. 파이썬에 상응하는 것이 있습니까? 난 정말이 아니라 두 번 전체 트리를 걸을 싶지만, rmtree에 onerror 인수 작업을 다시 시도하지 않는 것, 그래서 더 조사 후

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

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

'onerror 'callback? –

+0

.git은 읽기 전용입니다. – wim

+0

.git 서브 디렉토리가 읽기 전용이기 때문에 onerror에서 전체 (재귀 적) rmtree를 수행해야하지만 작동하지 않을 수 있습니다. 숨겨진 및 readonly 아마도 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을 사용할 필요가있을 것입니다 - 나는 그걸 필요로하지 않았지만 내 문제에 대해 특정한 것일 수 있습니다.