Gibt es eine tragbare Möglichkeit, den Benutzernamen des aktuellen Benutzers in Python abzurufen (d. H. Eine, die mindestens unter Linux und Windows funktioniert). Es würde wie os.getuid
funktionieren:
>>> os.getuid()
42
>>> os.getusername()
'slartibartfast'
Ich googelte herum und war überrascht, keine endgültige Antwort zu finden (obwohl ich vielleicht nur schlecht googelte). Das pwd -Modul bietet eine relativ einfache Möglichkeit, dies beispielsweise unter Linux zu erreichen, ist jedoch unter Windows nicht vorhanden. Einige der Suchergebnisse deuteten darauf hin, dass das Abrufen des Benutzernamens unter Windows unter bestimmten Umständen kompliziert sein kann (z. B. als Windows-Dienst ausgeführt), obwohl ich dies nicht überprüft habe.
Schauen Sie sich das getpass Modul an
import getpass
getpass.getuser()
'kostya'
Verfügbarkeit: Unix, Windows
p.s. Per Kommentar unter " untersucht diese Funktion die Werte verschiedener Umgebungsvariablen, um den Benutzernamen zu bestimmen. Daher sollte diese Funktion nicht für Zugriffskontrollzwecke (oder möglicherweise für einen anderen Zweck) herangezogen werden, da es erlaubt jedem Benutzer, sich als jeder andere auszugeben. "
Am besten kombinieren Sie os.getuid()
mit pwd.getpwuid()
:
import os
import pwd
def get_username():
return pwd.getpwuid( os.getuid() )[ 0 ]
Weitere Informationen finden Sie in den pwd-Dokumenten:
Sie können auch verwenden:
os.getlogin()
Sie können wahrscheinlich verwenden:
os.environ.get('USERNAME')
oder
os.environ.get('USER')
Es ist jedoch nicht sicher, da Umgebungsvariablen geändert werden können.
Dies könnte funktionieren. Ich weiß nicht, wie sie sich verhalten, wenn sie als Dienst ausgeführt werden. Sie sind nicht portierbar, aber dafür sind os.name
und if
Anweisungen gedacht.
win32api.GetUserName()
win32api.GetUserNameEx(...)
Siehe: http://timgolden.me.uk/python/win32_how_do_i/get-the-owner-of-a-file.html
Wenn Sie dies benötigen, um das Home-Verzeichnis des Benutzers abzurufen, kann das folgende als portabel (mindestens Win32 und Linux) betrachtet werden, als Teil einer Standardbibliothek.
>>> os.path.expanduser('~')
'C:\\Documents and Settings\\johnsmith'
Sie können diese Zeichenfolge auch analysieren, um nur die letzte Pfadkomponente (dh den Benutzernamen) abzurufen.
Siehe: os.path.expanduser
Für mich sieht die Verwendung des Moduls os
für die Portabilität am besten aus: Funktioniert am besten unter 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:
Windows:
Ausgangsverzeichnis des Benutzers: C:\Users\myuser
benutzername: myuser
Linux:
Home-Verzeichnis des Benutzers:/root
benutzername: root
Es müssen keine Module oder Erweiterungen installiert werden.
Kombinierter 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()
Zumindest unter UNIX funktioniert dies ...
import commands
username = commands.getoutput("echo $(whoami)")
print username
edit: Ich habe es gerade nachgeschlagen und es funktioniert unter Windows und UNIX:
import commands
username = commands.getoutput("whoami")
Unter UNIX gibt es Ihren Benutzernamen zurück, unter Windows jedoch die Benutzergruppe, den Schrägstrich und Ihren Benutzernamen.
-
I.E.
UNIX gibt zurück: "Benutzername"
Windows gibt zurück: "Domain/Benutzername"
-
Es ist interessant, aber wahrscheinlich nicht ideal, es sei denn, Sie tun sowieso etwas im Terminal. In diesem Fall würden Sie wahrscheinlich zunächst os.system
verwenden. Vor einiger Zeit musste ich beispielsweise meinen Benutzer zu einer Gruppe hinzufügen, was ich auch getan habe (das ist wohlgemerkt unter Linux).
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 denke, das ist einfacher zu lesen nd Sie müssen weder pwd noch getpass importieren.
Ich habe auch das Gefühl, dass "Domäne/Benutzer" in bestimmten Windows-Anwendungen hilfreich sein könnte.
Ich habe vor einiger Zeit das plx-Modul geschrieben, um den Benutzernamen unter Unix und Windows (unter anderem) portabel abzurufen: http://www.decalage.info/en/python/plx
Verwendungszweck:
import plx
username = plx.get_username()
(Es erfordert Win32-Erweiterungen unter Windows)
Sie können den aktuellen Benutzernamen unter Windows über die Windows-API abrufen, obwohl das Aufrufen über die C-Typen FFI ( GetCurrentProcess → OpenProcessToken → GetTokenInformation) etwas umständlich ist → LookupAccountSid ).
Ich habe ein kleines Modul geschrieben, das dies direkt von Python aus tun kann, getuser.py . Verwendungszweck:
import getuser
print(getuser.lookup_username())
Es funktioniert sowohl unter Windows als auch unter * nix (letzteres verwendet das pwd
-Modul, wie in den anderen Antworten beschrieben).
Verwenden Sie nur die Standard-python -Libs:
from os import environ,getcwd
getUser = lambda: environ["USERNAME"] if "C:" in getcwd() else environ["USER"]
user = getUser()
Funktioniert unter Windows oder Linux
Alternativ können Sie eine Zeile mit einem sofortigen Aufruf entfernen:
from os import environ,getcwd
user = (lambda: environ["USERNAME"] if "C:" in getcwd() else environ["USER"])()