Windows에서 Python 스크립트에서 관리자 권한을 확인하는 교차 플랫폼 방법?

StackOverflow https://stackoverflow.com/questions/1026431

  •  06-07-2019
  •  | 
  •  

문제

내 파이썬 스크립트가 관리자 권한으로 실행되었는지 확인하는 크로스 플랫폼 방법이 있습니까? 안타깝게도, os.getuid() Unix 전용이며 Windows에서는 사용할 수 없습니다.

도움이 되었습니까?

해결책

import ctypes, os
try:
 is_admin = os.getuid() == 0
except AttributeError:
 is_admin = ctypes.windll.shell32.IsUserAnAdmin() != 0

print is_admin

다른 팁

관리자 권한이 필요한 모든 것을 해보고 실패를 확인하십시오.

이것은 어떤 것들에만 효과가있을 것입니다. 당신은 무엇을하려고합니까?

스크립트가 실행중인 플랫폼을 확인하는 것이 좋습니다 (사용 sys.platform) 그리고 그에 따라 테스트를 수행하십시오. 예를 들어, 예를 들어 일부 hasadminrights 기능을 다른 플랫폼 별 모듈에서 가져옵니다.

창문에서는 여부를 확인할 수 있습니다 Windows\System32 사용을 사용합니다 os.access, 그러나 아마도 pywin32를 사용하여 시스템의 실제 "Windows"폴더 경로를 검색해야합니다. 하나를 하드 코드하지 마십시오.

관리자 그룹 멤버십 (도메인/로컬/엔터프라이즈)은 한 가지입니다.

담요 권한을 사용하지 않도록 애플리케이션을 조정하고 특히 앱을 iinterctically로 사용하는 경우 더 나은 옵션입니다.

특정 명명 된 권한 (SE_SHUTDOWN SE_RESTORE 등)에 대한 테스트, 파일 권한은 Abetter 베팅이며 진단하기가 더 쉽습니다.

여기에 내가 허용 된 답변에서 만든 유틸리티 기능은 다음과 같습니다.

import os
import ctypes

class AdminStateUnknownError(Exception):
    """Cannot determine whether the user is an admin."""
    pass


def is_user_admin():
    # type: () -> bool
    """Return True if user has admin privileges.

    Raises:
        AdminStateUnknownError if user privileges cannot be determined.
    """
    try:
        return os.getuid() == 0
    except AttributeError:
        pass
    try:
        return ctypes.windll.shell32.IsUserAnAdmin() == 1
    except AttributeError:
        raise AdminStateUnknownError
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top