有没有跨平台的方式来检查我的Python脚本与管理员权限执行? 不幸的是, os.getuid()
是UNIX只和Windows下不可用。
Answer 1:
import ctypes, os
try:
is_admin = os.getuid() == 0
except AttributeError:
is_admin = ctypes.windll.shell32.IsUserAnAdmin() != 0
print is_admin
Answer 2:
尝试做任何你需要管理员权限,并检查是否存在故障。
这将只对一些事情的工作,虽然,你想干什么?
Answer 3:
如果你检查你的脚本运行的平台(使用它的更好sys.platform
),并做了试验基础上,例如,从另一进口一些hasAdminRights功能,特定于平台的模块。
在Windows中,你可以检查是否Windows\System32
是可写的使用os.access
,但记得要尝试检索系统的实际的“Windows”文件夹的路径,可能使用pywin32。 不要硬编码之一。
Answer 4:
管理员组成员(域/本地/企业)是一件事..
定制你的应用程序无法使用全面的权限和设置细粒度的权利,尤其如果正在使用iinteractively应用程序更好的选择。
测试特定命名的权限(se_shutdown se_restore等),文件权限是一个更好的选择,更容易诊断。
Answer 5:
下面是我从接受的答案创建一个效用函数:
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
文章来源: Cross-platform way to check admin rights in a Python script under Windows?