None of the above worked in my case (scroll down to the actual solution).
The problem I'm getting with all solutions is the wrong username when running commands with sudo
:
$ python3
>>> import psutil
>>> psutil.Process().username()
'ubuntu'
$ sudo su
$ python3
>>> import psutil
>>> psutil.Process().username()
'root'
$ sudo python3
>>> import psutil
>>> psutil.Process().username()
'root'
$ python3
>>> import getpass
>>> getpass.getuser()
'ubuntu'
$ sudo su
$ python3
>>> import getpass
>>> getpass.getuser()
'root'
$ sudo python3
>>> import getpass
>>> getpass.getuser()
'root'
pwd
+ os.getuid
solution:
$ python3
>>> import os, pwd
>>> pwd.getpwuid( os.getuid() )[ 0 ]
'ubuntu'
$ sudo su
$ python3
>>> import os, pwd
>>> pwd.getpwuid( os.getuid() )[ 0 ]
'root'
$ sudo python3
>>> import getpass
>>> getpass.getuser()
'root'
os.getlogin
works a bit different, but still wrong:
$ python3
>>> import os
>>> os.getlogin()
'ubuntu'
$ sudo su
$ python3
>>> import os
>>> os.getlogin()
'ubuntu'
$ sudo python3
>>> import os
>>> os.getlogin()
'ubuntu'
os.getenv
gives the same results:
$ python3
>>> import os
>>> os.getenv('SUDO_USER', os.getenv('USER'))
'ubuntu'
$ sudo su
$ python3
>>> import os
>>> os.getenv('SUDO_USER', os.getenv('USER'))
'ubuntu'
$ sudo python3
>>> import os
>>> os.getenv('SUDO_USER', os.getenv('USER'))
'ubuntu'
Switching SUDO_USER
and USER
gives the wrong result in sudo python3
case.
Actual solution (non-portable)
Solution is a bit tricky and rely on the default root home directory location but works for all cases:
$ python3
>>> import os
>>> 'root' if os.path.expanduser('~') == '/root' else os.getenv('SUDO_USER', os.getenv('USER'))
'ubuntu'
$ sudo su
$ python3
>>> import os
>>> 'root' if os.path.expanduser('~') == '/root' else os.getenv('SUDO_USER', os.getenv('USER'))
'root'
$ sudo python3
>>> import os
>>> 'root' if os.path.expanduser('~') == '/root' else os.getenv('SUDO_USER', os.getenv('USER'))
'ubuntu'
import pwd, os; print pwd.getpwuid(os.getuid()).pw_gecos
orimport pwd, os; print pwd.getpwuid(os.getuid()).pw_name
- chown