Gibt es eine tragbare Möglichkeit, den Benutzernamen des aktuellen Benutzers in Python abzurufen (dh eine, die zumindest unter Linux und Windows funktioniert)? Es würde funktionieren wie os.getuid
:
>>> 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.
python
portability
username
Jacob Gabrielson
quelle
quelle
import pwd, os; print pwd.getpwuid(os.getuid()).pw_gecos
oderimport pwd, os; print pwd.getpwuid(os.getuid()).pw_name
Antworten:
Schauen Sie sich das Getpass- Modul an
Verfügbarkeit: Unix, Windows
ps Pro Kommentar unten " Diese Funktion untersucht die Werte verschiedener Umgebungsvariablen, um den Benutzernamen zu bestimmen. Daher sollte diese Funktion nicht für Zugriffskontrollzwecke (oder möglicherweise für andere Zwecke) verwendet werden, da sie es jedem Benutzer ermöglicht, sich als ein anderer auszugeben ). "
quelle
Am besten kombinieren Sie
os.getuid()
mitpwd.getpwuid()
:Weitere Informationen finden Sie in den pwd-Dokumenten:
http://docs.python.org/library/pwd.html
quelle
pwd.getpwuid(os.getuid()).pw_name
.ImportError: No module named pwd
sudo
Fall korrekt behandelt. (Ich bin mir bewusst, dass das OP nicht nach Unix-ähnlichen Systemen gefragt hat.)Sie können auch verwenden:
quelle
Sie können wahrscheinlich verwenden:
oder
Dies ist jedoch nicht sicher, da Umgebungsvariablen geändert werden können.
quelle
os.getenv(...)
wird zugunsten von abgelehntos.environ[...]
.os.getenv
scheint nicht veraltet zu sein ..?Diese könnten funktionieren. Ich weiß nicht, wie sie sich verhalten, wenn sie als Dienst ausgeführt werden. Sie sind nicht tragbar, aber das ist , was
os.name
undif
Aussagen sind.Siehe: http://timgolden.me.uk/python/win32_how_do_i/get-the-owner-of-a-file.html
quelle
SET USERNAME=FAKE
vor Ihrem Python-BefehlWenn Sie dies benötigen, um das Home-Verzeichnis des Benutzers abzurufen, kann das folgende Verzeichnis als portabel (mindestens Win32 und Linux) als Teil einer Standardbibliothek betrachtet werden.
Sie können diese Zeichenfolge auch analysieren, um nur die letzte Pfadkomponente (dh den Benutzernamen) abzurufen.
Siehe: os.path.expanduser
quelle
Für mich
os
sieht die Verwendung des Moduls für die Portabilität am besten aus: Funktioniert am besten unter Linux und Windows.Ausgabe:
Windows:
Linux:
Es müssen keine Module oder Erweiterungen installiert werden.
quelle
Kombiniert
pwd
undgetpass
Ansatz, basierend auf anderen Antworten:quelle
Zumindest unter UNIX funktioniert das ...
edit: Ich habe es gerade nachgeschlagen und das funktioniert unter Windows und UNIX:
Unter UNIX wird Ihr Benutzername zurückgegeben, unter Windows jedoch die Gruppe, der Schrägstrich und der Benutzername Ihres Benutzers.
- -
IE
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 es wahrscheinlich zuerst verwenden
os.system
. Zum Beispiel musste ich vor einiger Zeit meinen Benutzer zu einer Gruppe hinzufügen, also tat ich es (das ist unter Linux, wohlgemerkt)Ich denke , das ist einfacher zu lesen und Sie müssen weder pwd noch getpass importieren.
Ich habe auch das Gefühl, dass "Domain / Benutzer" in bestimmten Anwendungen unter Windows hilfreich sein könnte.
quelle
domain/user
nicht zurückgroup/user
user = subprocess.check_output("whoami").replace("\r\n", "")
chpst -u nobody python ./manage.py celerycam --pidfile=/var/run/celerycam/celerycam.pid
ich niemanden . Zweitensuser = subprocess.check_output("whoami").strip()
ist portabler als die ersetzen Zeilenvorschübe oben.commands
vssubprocess
scheint pingelig, aber Befehle fehlen in Python 3.Ich habe das PLX-Modul vor einiger Zeit geschrieben, um den Benutzernamen unter Unix und Windows (unter anderem) portabel abzurufen: http://www.decalage.info/en/python/plx
Verwendungszweck:
(Es erfordert Win32-Erweiterungen unter Windows)
quelle
Verwenden Sie nur Standard-Python-Bibliotheken:
Funktioniert unter Windows, Mac oder Linux
Alternativ können Sie eine Zeile mit einem sofortigen Aufruf entfernen:
quelle
Sie können den aktuellen Benutzernamen unter Windows über die Windows-API abrufen, obwohl das Aufrufen über die ctypes FFI ( GetCurrentProcess → OpenProcessToken → GetTokenInformation → LookupAccountSid ) etwas umständlich ist .
Ich habe ein kleines Modul geschrieben, das dies direkt aus Python heraus tun kann, getuser.py . Verwendungszweck:
Es funktioniert sowohl unter Windows als auch unter * nix (letzteres verwendet das
pwd
Modul wie in den anderen Antworten beschrieben).quelle