Existe-t-il un moyen portable d'obtenir le nom d'utilisateur de l'utilisateur actuel en Python (c'est-à-dire, qui fonctionne sous Linux et Windows, au moins). Cela fonctionnerait comme os.getuid
:
>>> os.getuid()
42
>>> os.getusername()
'slartibartfast'
J'ai fait des recherches sur Google et j'ai été surpris de ne pas trouver de réponse définitive (même si je cherchais peut-être mal sur Google). Le module pwd fournit un moyen relativement facile d'y parvenir sous, disons, Linux, mais il n'est pas présent sur Windows. Certains résultats de recherche suggèrent que l'obtention du nom d'utilisateur sous Windows peut être compliquée dans certaines circonstances (par exemple, en tant que service Windows), bien que je ne l'ai pas vérifié.
python
portability
username
Jacob Gabrielson
la source
la source
import pwd, os; print pwd.getpwuid(os.getuid()).pw_gecos
ouimport pwd, os; print pwd.getpwuid(os.getuid()).pw_name
Réponses:
Regardez le module getpass
Disponibilité: Unix, Windows
ps Par commentaire ci-dessous ", cette fonction examine les valeurs de diverses variables d'environnement pour déterminer le nom d'utilisateur. Par conséquent, cette fonction ne doit pas être utilisée à des fins de contrôle d'accès (ou éventuellement à toute autre fin, car elle permet à tout utilisateur de se faire passer pour n'importe quel autre ). "
la source
Le mieux serait de combiner
os.getuid()
avecpwd.getpwuid()
:Reportez-vous à la documentation de pwd pour plus de détails:
http://docs.python.org/library/pwd.html
la source
pwd.getpwuid(os.getuid()).pw_name
.ImportError: No module named pwd
sudo
correctement le cas. (Je sais que l'OP n'a pas demandé de systèmes de type Unix.)Vous pouvez aussi utiliser:
la source
Vous pouvez probablement utiliser:
ou
Mais cela ne sera pas sûr car les variables d'environnement peuvent être modifiées.
la source
os.getenv(...)
est déconseillé en faveur deos.environ[...]
.os.getenv
ne semble pas être obsolète ..?Cela pourrait fonctionner. Je ne sais pas comment ils se comportent lors de l'exécution en tant que service. Ils ne sont pas portables, mais c'est ce que
os.name
et lesif
déclarations sont pour.Voir: http://timgolden.me.uk/python/win32_how_do_i/get-the-owner-of-a-file.html
la source
SET USERNAME=FAKE
avant votre commande pythonSi vous en avez besoin pour obtenir le répertoire personnel de l'utilisateur, ci-dessous peut être considéré comme portable (win32 et linux au moins), faisant partie d'une bibliothèque standard.
Vous pouvez également analyser une telle chaîne pour obtenir uniquement le dernier composant du chemin (c'est-à-dire le nom d'utilisateur).
Voir: os.path.expanduser
la source
Pour moi, l'utilisation du
os
module est la meilleure pour la portabilité: fonctionne mieux sous Linux et Windows.Production:
Les fenêtres:
Linux:
Pas besoin d'installer de modules ou d'extensions.
la source
Combiné
pwd
etgetpass
approche, basé sur d'autres réponses:la source
Pour UNIX, au moins, cela fonctionne ...
edit: Je viens de le chercher et cela fonctionne sur Windows et UNIX:
Sous UNIX, il renvoie votre nom d'utilisateur, mais sous Windows, il renvoie votre groupe d'utilisateurs, slash, votre nom d'utilisateur.
-
C'EST À DIRE
UNIX renvoie: "nom d'utilisateur"
Windows renvoie: "domaine / nom d'utilisateur"
-
C'est intéressant, mais probablement pas idéal à moins que vous ne fassiez quelque chose dans le terminal de toute façon ... auquel cas vous utiliseriez probablement
os.system
pour commencer. Par exemple, il y a quelque temps, j'avais besoin d'ajouter mon utilisateur à un groupe, alors je l'ai fait (c'est sous Linux, remarquez)Je pense que c'est plus facile à lire et que vous n'avez pas besoin d'importer pwd ou getpass.
Je pense également que le fait d'avoir "domaine / utilisateur" pourrait être utile dans certaines applications de Windows.
la source
domain/user
group/user
user = subprocess.check_output("whoami").replace("\r\n", "")
chpst -u nobody python ./manage.py celerycam --pidfile=/var/run/celerycam/celerycam.pid
je n'ai personne . deuxièmement,user = subprocess.check_output("whoami").strip()
est plus portable que les sauts de ligne de remplacement ci-dessus.commands
vssubprocess
semble nitpicky mais les commandes sont absentes de python 3.J'ai écrit le module plx il y a quelque temps pour obtenir le nom d'utilisateur de manière portable sur Unix et Windows (entre autres): http://www.decalage.info/en/python/plx
Usage:
(il nécessite des extensions win32 sous Windows)
la source
Utiliser uniquement des bibliothèques python standard:
Fonctionne sur Windows, Mac ou Linux
Alternativement, vous pouvez supprimer une ligne avec un appel immédiat:
la source
Vous pouvez obtenir le nom d'utilisateur actuel sous Windows en passant par l'API Windows, bien qu'il soit un peu lourd à appeler via les ctypes FFI ( GetCurrentProcess → OpenProcessToken → GetTokenInformation → LookupAccountSid ).
J'ai écrit un petit module qui peut le faire directement depuis Python, getuser.py . Usage:
Il fonctionne à la fois sur Windows et * nix (ce dernier utilise le
pwd
module comme décrit dans les autres réponses).la source