Windows에서 Python 스크립트에서 관리자 권한을 확인하는 교차 플랫폼 방법?
-
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
제휴하지 않습니다 StackOverflow