执行python脚本时,如何找到执行sudo的用户名?

When executing python script, How to find username from which sudo is executed?

我正在编写一个代码,它将 运行 在不同的机器上运行。 在代码中,日志文件需要创建为 "/tmp/2019-05-02/log_file" 即,为每天创建一个子目录,然后在新文件夹中创建日志文件。出于这个原因,要在“/tmp”目录中创建目录,我需要 运行 我的代码为

sudo python /path/to/code.py

稍后在同一代码中,我需要在 "Documents" 中为每一天创建另一个目录。这个新创建的目录的所有者是 root,因为我的代码是 运行ning 作为 sudo。 当我想从 UI 应用程序 :Files.

中删除 Documents 中这个新创建的子目录时,真正的问题出现了

所以我所做的是更改目录权限。这样我就可以毫不费力地删除这个文件夹。

os.chmod("/path/to/directory/inside/Documents", 0747)

但现在当我 ls 进入文档时。这些新创建的文件夹显示为绿色背景的蓝色文本 |表示目录可由除拥有用户和组之外的其他人写入,并且没有设置粘滞位 (o+w, -t)。

有什么方法可以让 /tmp/2019-05-2 中创建的文件夹的所有者是 root,而在 Documents 中创建的文件夹由普通用户拥有(从该用户我以 sudo 身份执行程序)。

在我的机器上,用户是 dell。因为我知道我的用户名,所以我可以在我的机器上使用 chown 更改所有者。但是我需要更改所有者,即使代码在不同的机器上使用不同的用户名执行。

恕我直言,最可靠的方法是使用 os.getlogin()。它 returns 与 session 关联的登录名,只能通过 setlogin 系统调用更改,一般程序中很少使用 (ref.).

Python 手册说:

For most purposes, it is more useful to use the environment variables LOGNAME or USERNAME to find out who the user is...

但是 unix 手册页解释了背后的基本原理:

... This is more flexible precisely because the user can set LOGNAME arbitrarily.