import os
import getpass
print(getpass.getuser())
Consider the following script.
---- foo.py ----
import os
import getpass
print("Env thinks the user is [%s]" % (os.getlogin()))
print("Effective user is [%s]" % (getpass.getuser()))
Consider running the script.
$ python ./foo.py
results in
Env thinks the user is [jds]
Effective user is [jds]
now run
$ sudo -u apache python ./foo.py
results in
Env thinks the user is [jds]
Effective user is [apache]
As you can see, you these 2 calls os.getlogin() and getpass.getuser() are not the same thing.
The underlying principle is how linux/and other unix’s manages the running user.
Consider
$ id -u
1000
vs the effective id of the running process.
$ sudo -u apache id -u
33
Note: this is exactly what web servers are doing when they start up. They are creating a sandbox (by forking/divorcing the psudo terminal etc),
and running as another user. For an in-depth account of what is going on here: see the chapter on ‘daemon processes’ in the Advanced Programming in the UNIX environment book.
Another good thread on the subject.