Question Existe-t-il un moyen portable d'obtenir le nom d'utilisateur actuel en Python?


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é.


479
2018-05-08 22:20


origine


Réponses:


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)."


654
2018-05-08 22:30



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


99
2018-05-24 17:53



Vous pouvez aussi utiliser:

 os.getlogin()

62
2017-10-20 13:00



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.


49
2018-05-08 22:35



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


19
2018-01-02 21:35



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


16
2018-02-09 01:23



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.


14
2017-12-05 14:39



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()

9
2017-11-08 17:47



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.


8
2017-09-16 17:31