Keine der oben genannten Lösungen hat in meinem Fall funktioniert (scrollen Sie nach unten zur eigentlichen Lösung).
Das Problem, das ich bei allen Lösungen habe, ist der falsche Benutzername beim Ausführen von Befehlen mit sudo
:
-
psutil
Lösung:
$ python3
import psutil
psutil.Process().username()
'ubuntu' # OK!
$ sudo su
$ python3
import psutil
psutil.Process().username()
'root' # OK!
$ sudo python3
import psutil
psutil.Process().username()
'root' # FALSCH, sollte ubuntu sein!
-
getpass
Lösung:
$ python3
import getpass
getpass.getuser()
'ubuntu' # OK!
$ sudo su
$ python3
import getpass
getpass.getuser()
'root' # OK!
$ sudo python3
import getpass
getpass.getuser()
'root' # FALSCH, sollte ubuntu sein!
-
pwd
+ os.getuid
Lösung:
$ python3
import os, pwd
pwd.getpwuid( os.getuid() )[ 0 ]
'ubuntu' # OK!
$ sudo su
$ python3
import os, pwd
pwd.getpwuid( os.getuid() )[ 0 ]
'root' # OK!
$ sudo python3
import getpass
getpass.getuser()
'root' # FALSCH, sollte ubuntu sein!
-
os.getlogin
funktioniert etwas anders, aber immer noch falsch:
$ python3
import os
os.getlogin()
'ubuntu' # OK!
$ sudo su
$ python3
import os
os.getlogin()
'ubuntu' # FALSCH, sollte root sein!
$ sudo python3
import os
os.getlogin()
'ubuntu' # OK!
-
os.getenv
liefert die gleichen Ergebnisse:
$ python3
import os
os.getenv('SUDO_USER', os.getenv('USER'))
'ubuntu' # OK!
$ sudo su
$ python3
import os
os.getenv('SUDO_USER', os.getenv('USER'))
'ubuntu' # FALSCH, sollte root sein!
$ sudo python3
import os
os.getenv('SUDO_USER', os.getenv('USER'))
'ubuntu' # OK!
Das Umschalten von SUDO_USER
und USER
liefert im Fall von sudo python3
das falsche Ergebnis.
Eigentliche Lösung (nicht portabel)
Die Lösung ist etwas knifflig und basiert auf dem Standard-Home-Verzeichnis von root, funktioniert aber in allen Fällen:
$ python3
>>> import os
>>> 'root' if os.path.expanduser('~') == '/root' else os.getenv('SUDO_USER', os.getenv('USER'))
'ubuntu' # OK!
$ sudo su
$ python3
>>> import os
>>> 'root' if os.path.expanduser('~') == '/root' else os.getenv('SUDO_USER', os.getenv('USER'))
'root' # OK!
$ sudo python3
>>> import os
>>> 'root' if os.path.expanduser('~') == '/root' else os.getenv('SUDO_USER', os.getenv('USER'))
'ubuntu' # OK!
0 Stimmen
Es funktioniert nicht auf meinem Linux-Rechner!
6 Stimmen
import pwd, os; print pwd.getpwuid(os.getuid()).pw_gecos
oderimport pwd, os; print pwd.getpwuid(os.getuid()).pw_name
0 Stimmen
Getusername() ist keine gültige Methode im os Python-Modul: docs.python.org/2.7/library/os.html
27 Stimmen
@MattBruzek Das war der Standpunkt des OPs. Er stellte sich vor, wie eine solche Funktion aufgerufen werden könnte, wenn sie existierte.
2 Stimmen
"Benutzername" ist nicht einmal ein tragbares Konzept. Überlegen Sie sich microPython - wenn Sie direkt auf der Hardware laufen, gibt es so etwas nicht.
0 Stimmen
Upvote für Slartibartfast