Gibt es einen tragbaren Weg, um den aktuellen Benutzernamen in Python zu bekommen?

Gibt es einen tragbaren Weg, um den Benutzernamen des aktuellen Benutzers in Python zu bekommen (dh einer, der unter Linux und Windows arbeitet) mindestens). Es würde funktionieren wie os.getuid :

 >>> os.getuid() 42 >>> os.getusername() 'slartibartfast' 

Ich ging herum und war überrascht, keine endgültige Antwort zu finden (obwohl ich vielleicht nur schlecht gegessen habe). Das pwd- Modul bietet eine relativ einfache Möglichkeit, dies unter zB Linux zu erreichen, aber es ist nicht bei Windows vorhanden. Einige der Suchergebnisse zeigten, dass das Erhalten des Benutzernamens unter Windows unter bestimmten Umständen kompliziert werden kann (zB als Windows-Dienst ausgeführt), obwohl ich das nicht überprüft habe.

    11 Solutions collect form web for “Gibt es einen tragbaren Weg, um den aktuellen Benutzernamen in Python zu bekommen?”

    Schau auf passpass module

     import getpass getpass.getuser() 'kostya' 

    Verfügbarkeit: Unix, Windows


    Ps Per Kommentar unten " Diese Funktion untersucht die Werte der verschiedenen Umgebungsvariablen, um den Benutzernamen zu ermitteln. Daher sollte diese Funktion nicht auf Zugangskontrollzwecke (oder ggf. ein anderer Zweck) angewendet werden, da es jedem Benutzer erlaubt, irgendwelche anderen imitieren zu lassen ). "

    Am besten wette wäre es, os.getuid() mit pwd.getpwuid() zu kombinieren:

     import os import pwd def get_username(): return pwd.getpwuid( os.getuid() )[ 0 ] 

    Weitere Informationen finden Sie in den PC-Dokumenten:

    http://docs.python.org/library/pwd.html

    Sie können auch:

      os.getlogin() 

    Sie können wahrscheinlich verwenden:

     os.environ.get('USERNAME') 

    Aber es wird nicht sicher sein, weil Umgebungsvariablen geändert werden können.

    Diese könnten funktionieren. Ich weiß nicht, wie sie sich verhalten, wenn sie als Dienst laufen. Sie sind nicht tragbar, aber das ist, was "os.name" und "if" Aussagen sind.

    Win32api.GetUserName ()

    Win32api.GetUserNameEx (…)

    Siehe: http://timgolden.me.uk/python/win32_how_do_i/get-the-owner-of-a-file.html

    Wenn du dies brauchst, um das Heimatverzeichnis des Nutzers zu bekommen, könnte man unten als tragbar ansehen (Win32 und Linux zumindest), Teil einer Standardbibliothek.

     >>> os.path.expanduser('~') 'C:\\Documents and Settings\\johnsmith' 

    Auch könntest du diesen String analysieren, um nur die letzte Pfadkomponente zu erhalten (zB Benutzername).

    Siehe: os.path.expanduser

    Für mich mit os Modul sieht das Beste für Portabilität: Funktioniert am besten auf Linux und 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] 

    Ausgabe:

    Fenster:

    Benutzerhaus Dir: C: \ Users \ myuser

    Benutzername: myuser

    Linux:

    Benutzerhaus Dir: / root

    Benutzername: root

    Keine Notwendigkeit, Module oder Erweiterungen zu installieren.

    Kombinierte pwd und getpass Ansatz, basierend auf anderen Antworten:

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

    Für UNIX, das funktioniert …

     import commands username = commands.getoutput("echo $(whoami)") print username 

    Edit: Ich habe es gerade gesehen und das funktioniert bei Windows und UNIX:

     import commands username = commands.getoutput("whoami") 

    Unter UNIX gibt es Ihren Benutzernamen zurück, aber unter Windows gibt es die Gruppe deines Benutzers zurück, Schrägstrich, dein Benutzername.

    IE

    UNIX gibt Folgendes zurück: "username"

    Windows kehrt zurück: "domain / username"

    Es ist interessant, aber wohl nicht ideal, wenn du sowieso nichts im Terminal tust … in welchem ​​Fall würdest du wahrscheinlich mit os.system . Zum Beispiel, vor einer Weile musste ich meinen Benutzer zu einer Gruppe hinzufügen, also habe ich (das ist in Linux, kümmern Sie sich)

     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" 

    Ich fühle mich wie das ist einfacher zu lesen und man muss nicht importieren pwd oder getpass.

    Ich habe auch das Gefühl, dass "Domain / User" bei bestimmten Anwendungen in Windows hilfreich sein könnte.

    Ich habe das Plx-Modul vor einiger Zeit geschrieben, um den Benutzernamen auf Unix und Windows (unter anderem) auf den Benutzernamen zu bekommen: http://www.decalage.info/de/python/plx

    Verwendung:

     import plx username = plx.get_username() 

    (Es erfordert Win32-Erweiterungen unter Windows)

    Sie können den aktuellen Benutzernamen auf Windows erhalten, indem Sie durch die Windows-API gehen, obwohl es ein bisschen umständlich ist, über die Ctypes FFI ( GetCurrentProcess → OpenProcessToken → GetTokenInformation → LookupAccountSid ) aufzurufen .

    Ich habe ein kleines Modul geschrieben, das das gerade aus Python, getuser.py machen kann . Verwendung:

     import getuser print(getuser.lookup_username()) 

    Es funktioniert sowohl auf Windows als auch auf * nix (letzteres verwendet das pwd Modul, wie in den anderen Antworten beschrieben).

    Python ist die beste Programmiersprache der Welt.