Кросс-платформенный способ проверки прав администратора в скрипте Python под Windows? - PullRequest
17 голосов
/ 22 июня 2009

Есть ли кроссплатформенный способ проверить, что мой скрипт Python выполняется с правами администратора? К сожалению, os.getuid() только для UNIX и недоступен в Windows.

Ответы [ 5 ]

40 голосов
/ 22 июня 2009
import ctypes, os
try:
 is_admin = os.getuid() == 0
except AttributeError:
 is_admin = ctypes.windll.shell32.IsUserAnAdmin() != 0

print is_admin
4 голосов
/ 22 июня 2009

Попробуйте сделать все, для чего вам нужны права администратора, и проверьте, нет ли ошибок.

Это будет работать только для некоторых вещей, что вы пытаетесь сделать?

3 голосов
/ 22 июня 2009

Лучше, если вы проверите, на какой платформе работает ваш скрипт (используя sys.platform), и проведете тест на его основе, например, импортировать некоторую функцию hasAdminRights из другого модуля, специфичного для платформы.

В Windows вы можете проверить, доступна ли запись Windows\System32, используя os.access, но не забудьте попытаться получить действительный системный путь к папке «Windows», возможно, с помощью pywin32. Не кодируйте одно.

1 голос
/ 02 апреля 2017

Вот полезная функция, которую я создал из принятого ответа:

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
1 голос
/ 24 июня 2009

Членство в группе администраторов (Домен / Локальный / Предприятие) - это одно.

Настройка вашего приложения таким образом, чтобы он не использовал общие привилегии, и установка точных прав - это лучший вариант, особенно если приложение используется интерактивно.

тестирование для определенных именованных привилегий (se_shutdown se_restore и т. Д.), Права на файл лучше, и их проще диагностировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...