2009-05-13 5 views
26

Quelle est la meilleure façon de trouver l'utilisateur qu'un processus python est en cours d'exécution?whoami en python

que je pouvais faire ceci:

name = os.popen('whoami').read() 

Mais cela doit commencer un nouveau processus.

os.environ["USER"] 

fonctionne parfois, mais parfois cette variable d'environnement n'est pas définie.

Répondre

18

Cela devrait fonctionner sous Unix.

import os 
print os.getuid() # numeric uid 
import pwd 
print pwd.getpwuid(os.getuid()) # full /etc/passwd info 
+0

Cette solution ne fonctionne que sur Unix voir http://docs.python.org/library/pwd.html?highlight=pwd –

+0

Works sur mon linux, j'ai eu la même réponse que celle-ci, mais supprimerons comme je l'étais 2 minutes plus tard ;-) – ChristopheD

+0

getpass.getuser() utilise cette approche comme une solution de repli si elle ne peut pas trouver le nom d'utilisateur dans les variables d'environnement. –

56
import getpass 
print getpass.getuser() 

Voir la documentation du module getpass.

getpass.getuser()

Retour le « Nom de connexion » de l'utilisateur. Disponibilité: Unix, Windows.

Cette fonction vérifie les variables d'environnement LOGNAME, USER, LNAME et NOMUTILISATEUR, dans l'ordre, et renvoie la valeur de la première qui est fixé à une chaîne non vide. Si aucun n'est défini, le nom de connexion de la base de données de mots de passe est renvoyé sur les systèmes prenant en charge le module pwd, sinon, une exception est générée.

+1

C'est génial, je ne connaissais pas ce genre de choses. –

+6

super, mais n'importe qui peut altérer ces variables. Ne comptez JAMAIS sur cela comme un moyen sécurisé d'obtenir le nom d'utilisateur de l'utilisateur. Tu étais prévenu. – Cinder