문제

파이썬이 일부 디렉토리를 삭제하려고 노력하고 있으며 액세스 오류가 발생합니다. Python 사용자 계정에 권한이 없다고 생각합니까?

WindowsError: [Error 5] Access is denied: 'path'

스크립트를 실행할 때 얻는 것입니다.
난 노력 했어

shutil.rmtree  
os.remove  
os.rmdir

그들은 모두 같은 오류를 반환합니다.

도움이 되었습니까?

해결책

파일에서 파일과 디렉토리를 제거하는 데 문제가 있었는데, 방금 복사 한 경우에도 'Readonly'로 설정된 경우에도 복사 한 경우에도 파일과 디렉토리를 제거했습니다. shutil.rmtree() 이 상황을 처리 할 수있는 예외 처리기를 제공합니다. 당신은 그것을 호출하고 다음과 같은 예외 핸들러를 제공합니다.

import errno, os, stat, shutil

def handleRemoveReadonly(func, path, exc):
  excvalue = exc[1]
  if func in (os.rmdir, os.remove) and excvalue.errno == errno.EACCES:
      os.chmod(path, stat.S_IRWXU| stat.S_IRWXG| stat.S_IRWXO) # 0777
      func(path)
  else:
      raise

shutil.rmtree(filename, ignore_errors=False, onerror=handleRemoveReadonly)

당신은 그것을 시도하고 싶을 것입니다.

다른 팁

나는 Python을 사용한 적이 없지만 사용자가 스크립트를 실행하는 것으로 실행된다고 가정합니다.

스크립트에는 특별한 사용자가 없으며 현재 로그인 한 사용자로 실행하여 스크립트를 실행했습니다.

확인해 보셨습니까?

  • 유효한 경로를 삭제하려고합니까? 그리고 그
  • 경로에는 잠긴 파일이 없습니까?

스크립트가 예정된 작업으로 실행되는 경우 (정리 스크립트의 경우) 시스템으로 실행될 수 있습니다. 시스템에 액세스 할 수 없도록 디렉토리에 대한 권한을 설정하는 것은 (현명하지만) 가능합니다.

디렉토리가 비어 있고, 그렇지 않으면 이러한 방법이 디렉토리의 내용을 삭제하는 것을 지원합니까?

스크립트를 어떻게 실행하고 있습니까? 대화식 콘솔 세션에서? 그렇다면 DOS 명령 창 (CMD 사용)을 열고 'Whoami'를 입력하십시오. 그것이 당신이 스크립트를 대화식으로 실행하는 사람입니다.

Ok 지금 방금 편집을 보았습니다 ... 경로를 인쇄하고 속성을 확인하여 스크립트를 실행하는 사용자 계정에 필요한 권한이 있는지 확인하지 않겠습니까?

WHOAMI가 귀하의 Windows 버전에서 작동하지 않으면 사용자 이름 설정 및 명령 창에서 DomainName을 설정하는 환경 변수를 사용할 수 있습니다.

@Thomash : 벽에 또 다른 벽돌.

UNIX 시스템에서는 부모 디렉토리도 쓸 수 있도록해야합니다. 다음은 다른 버전입니다.

def remove_readonly(func, path, exc):
    excvalue = exc[1]
    if func in (os.rmdir, os.remove) and excvalue.errno == errno.EACCES:

        # ensure parent directory is writeable too
        pardir = os.path.abspath(os.path.join(path, os.path.pardir))
        if not os.access(pardir, os.W_OK):
            os.chmod(pardir, stat.S_IRWXU| stat.S_IRWXG| stat.S_IRWXO)

        os.chmod(path, stat.S_IRWXU| stat.S_IRWXG| stat.S_IRWXO) # 0777
        func(path)
    else:
        raise

시간을 검색 한 후 간단한 솔루션은 해당 폴더가 실제로 존재하는지 먼저 확인하는 것입니다!

GIT_DIR="C:/Users/...."
if os.path.exists(GIT_DIR):
    shutil.rmtree(GIT_DIR)

이것은 나를 위해 트릭을했다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top