Existe-t-il un moyen portable d’obtenir le nom d’utilisateur actuel de Python (c’est-à-dire fonctionnant sous Linux et Windows, au moins)? Ça marcherait 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 ne faisais que peu de recherches sur Google). le pwd module fournit un moyen relativement facile d'y parvenir, disons sous Linux, mais il n'est pas présent sous Windows. Certains des 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 cours d'exécution en tant que service Windows), bien que je ne l'ai pas vérifié.
Regarder getpass module
import getpass
getpass.getuser()
'kostya'
Disponibilité: Unix, Windows
p.s. 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 invoquée à des fins de contrôle d'accès (ou éventuellement à d'autres fins, car elle permet à tout utilisateur d'usurper l'identité d'un autre)."
Votre meilleur pari serait de combiner os.getuid()
avec pwd.getpwuid()
:
import os
import pwd
def get_username():
return pwd.getpwuid( os.getuid() )[ 0 ]
Reportez-vous à la documentation pwd pour plus de détails:
http://docs.python.org/library/pwd.html
Vous pouvez aussi utiliser:
os.getlogin()
Vous pouvez probablement utiliser:
os.environ.get('USERNAME')
Mais cela ne va pas être sûr car les variables d'environnement peuvent être changées.
Celles-ci pourraient fonctionner. Je ne sais pas comment ils se comportent lors de la course en tant que service. Ils ne sont pas portables, mais c'est à quoi servent les instructions "os.name" et "if".
win32api.GetUserName ()
win32api.GetUserNameEx (...)
Voir:
http://timgolden.me.uk/python/win32_how_do_i/get-the-owner-of-a-file.html
Si vous en avez besoin pour obtenir le répertoire personnel de l'utilisateur, vous pouvez le considérer comme portable (win32 et linux au moins), faisant partie d'une bibliothèque standard.
>>> os.path.expanduser('~')
'C:\\Documents and Settings\\johnsmith'
Vous pouvez également analyser une telle chaîne pour obtenir uniquement le dernier composant de chemin (c'est-à-dire le nom d'utilisateur).
Voir: os.path.expanduser
Pour moi en utilisant os
le module semble le meilleur pour la portabilité: fonctionne mieux sur Linux et Windows.
import os
# Gives user's home directory
userhome = os.path.expanduser('~')
print "User's home Dir: " + userhome
# Gives username by splitting path based on OS
print "username: " + os.path.split(userhome)[-1]
Sortie:
Les fenêtres:
Répertoire de l'utilisateur: C: \ Users \ myuser
nom d'utilisateur: myuser
Linux:
Domicile de l'utilisateur Dir: / root
nom d'utilisateur: root
Pas besoin d'installer des modules ou des extensions.
Combiné pwd
et getpass
approche, basée sur d'autres réponses:
try:
import pwd
except ImportError:
import getpass
pwd = None
def current_user():
if pwd:
return pwd.getpwuid(os.geteuid()).pw_name
else:
return getpass.getuser()
Pour UNIX, au moins, cela fonctionne ...
import commands
username = commands.getoutput("echo $(whoami)")
print username
modifier:
Je viens de le chercher et cela fonctionne sur Windows et UNIX:
import commands
username = commands.getoutput("whoami")
Sous UNIX, il renvoie votre nom d'utilisateur, mais sur Windows, il renvoie le groupe de votre utilisateur, 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, je devais ajouter mon utilisateur à un groupe, alors j'ai fait (sous Linux, remarquez)
import os
os.system("sudo usermod -aG \"group_name\" $(whoami)")
print "You have been added to \"group_name\"! Please log out for this to take effect"
Je me sens comme c'est plus facile à lire et vous n'avez pas besoin d'importer pwd ou getpass.
J'ai aussi le sentiment que "domaine / utilisateur" pourrait être utile dans certaines applications de Windows.