Frage

Gibt es eine plattformübergreifende Art und Weise zu überprüfen, ob mein Python-Skript mit Admin-Rechten ausgeführt wird? Leider os.getuid() ist UNIX-nur und ist nicht verfügbar unter Windows.

War es hilfreich?

Lösung

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

print is_admin

Andere Tipps

Versuchen Sie, was Sie über Administratorrechte für müssen und prüfen Sie für das Scheitern.

Dies wird nur obwohl für einige Dinge funktionieren, was Sie zu tun versuchen?

Es ist besser, wenn Sie überprüfen, welche Plattform das Skript (mit sys.platform) ausgeführt wird und einen Test basiert darauf, dass, zum Beispiel importieren einige hasAdminRights Funktion von einem anderen, plattformspezifische Modul.

Unter Windows können Sie prüfen, ob Windows\System32 beschreibbar ist os.access verwenden, aber denken Sie daran, versuchen System die tatsächlichen Ordner „Windows“ Pfad abzurufen, wahrscheinlich pywin32 verwenden. Nicht ein hart codieren.

Administrator-Gruppenmitgliedschaft (Domain / Local / Enterprise) ist eine Sache ..

Ihre Anwendung Maßschneidern nicht Decke Privileg zu verwenden und Einstellung feinkörniges Rechts ist eine bessere Option vor allem, wenn die App iinteractively verwendet werden.

Tests für bestimmte benannte Privilegien (se_shutdown se_restore etc.), Dateirechte sind abetter Wette und leichter zu diagnostizieren.

Hier ist eine Nutzenfunktion I aus der akzeptierten Antwort erstellt:

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top