Méthode multi-plateforme pour vérifier les droits d'administrateur dans un script Python sous Windows?

StackOverflow https://stackoverflow.com/questions/1026431

  •  06-07-2019
  •  | 
  •  

Question

Existe-t-il un moyen multiplateforme de vérifier que mon script Python est exécuté avec des droits d'administrateur? Malheureusement, os.getuid () est réservé à UNIX et n'est pas disponible sous Windows.

Était-ce utile?

La solution

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

print is_admin

Autres conseils

Essayez de faire tout ce dont vous avez besoin des droits d'administrateur et vérifiez en cas d'échec.

Cela ne fonctionnera que pour certaines choses, que tentez-vous de faire?

Il est préférable de vérifier quelle plate-forme votre script est en cours d'exécution (à l'aide de sys.platform ) et d'effectuer un test sur cette base, par exemple. importer des fonctions hasAdminRights depuis un autre module spécifique à la plate-forme.

Sous Windows, vous pouvez vérifier si Windows \ System32 est accessible en écriture à l’aide de os.access , sans oublier d’essayer de récupérer le véritable " système Windows " chemin du dossier, probablement en utilisant pywin32. Ne codez pas un seul.

L’appartenance à un groupe d’administrateurs (domaine / local / entreprise) est une chose.

adapter votre application pour ne pas utiliser les privilèges généraux et définir des droits affinés est une meilleure option, en particulier si l'application est utilisée de manière interactive.

tester des privilèges nommés particuliers (se_shutdown se_restore, etc.), les droits sur les fichiers sont plus faciles à diagnostiquer.

Voici une fonction utilitaire que j'ai créée à partir de la réponse acceptée:

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top