跨平台的方式来检查在Windows下一个Python脚本管理员权限?(Cross-platform

2019-07-29 02:09发布

有没有跨平台的方式来检查我的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?