执行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.
我正在编写一个代码,它将 运行 在不同的机器上运行。 在代码中,日志文件需要创建为 "/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.