본문 바로가기

개발하자

Python에서 디렉터리 권한을 테스트하시겠습니까?

반응형

Python에서 디렉터리 권한을 테스트하시겠습니까?

윈도우의 파이썬에서 사용자가 디렉토리에 액세스할 수 있는 권한이 있는지 확인할 수 있는 방법이 있나요? 제가 살펴봤는데 잘못된 결과가 나와요.

>>> os.access('C:\haveaccess', os.R_OK)
False
>>> os.access(r'C:\haveaccess', os.R_OK)
True
>>> os.access('C:\donthaveaccess', os.R_OK)
False
>>> os.access(r'C:\donthaveaccess', os.R_OK)
True

내가 뭘 잘못하고 있나요? 사용자가 디렉토리에 액세스할 수 있는 권한이 있는지 확인할 수 있는 더 좋은 방법이 있습니까?




Windows(윈도우)에서 사용 권한을 확인하는 것은 복잡할 수 있습니다(예: UAC를 사용하는 Vista의 문제에 주의! -- 이 항목 참조).

디렉토리의 내용을 읽는 것과 같은 간단한 읽기 액세스를 말하는 건가요? 권한을 테스트하는 가장 확실한 방법은 디렉터리에 액세스하여 예외를 탐지하는 것입니다(예: do an).

또한 경로를 올바르게 해석하려면 원시 문자열을 사용하거나 백슬래시('\\')를 이스케이프하거나, 대신 슬래시를 사용해야 합니다.

(EDIT: 경로를 만드는 권장 방법을 사용하여 슬래시를 모두 방지할 수 있습니다.)




os.access는 경로에 액세스할 수 있는지 여부를 확인하기 위해 최선을 다하지만 완벽하다고 주장하지는 않습니다. Python 문서에서:

참고: 액세스()가 성공할 것임을 나타내는 경우에도 I/O 작업이 실패할 수 있으며, 특히 일반적인 POSIX 권한 비트 모델 이상의 권한 의미를 가질 수 있는 네트워크 파일 시스템의 작업의 경우에는 더욱 그렇습니다.

사용자가 무엇이든 할 수 있는 액세스 권한이 있는지 확인하고 발생하는 예외를 포착하는 권장 방법입니다.




실제로 'C:\have access'는 r'C:\have access'와 다릅니다. Python의 관점에서 'C:\haveaccess'는 올바른 경로가 아니므로 'C:\\\have access' 대신 사용합니다. OS 접속이 잘 되는 것 같아요.




/를 사용하는 @dF.의 접근법에 대한 코드를 제공할 것이다:

def can_access(path: str) -> bool:
    """Check if we can access folder on network drive"""
    try:
        os.scandir(path)
        return True
    except PermissionError:
        return False

반응형