2 回答
TA贡献1784条经验 获得超8个赞
您需要定义什么是“登录名”(以及为什么需要它)。在细节中,它并不是那么简单(我不确定你是否完全理解它到底是什么,即使是在我不知道的 Windows 上)。该通知os.getlogin被记载为使用控制终端(进一步了解这些中的TTY揭秘, PTY(7) ,TTY(4) ),并且在一些情况下(例如一个的crontab(5)工作,远程命令开始通ssh等..) 你没有。
您可以使用一些环境变量。请参阅environ(7)和getenv(3)(并找到它的 Python 等效项,可能是os.environ)。在大多数情况下(在一些交互式会话中),USER和LOGNAME环境变量都会给你一些“登录名”。在病理情况下,它们可能丢失或不同(或不正确,想想setuid程序)。Python有getpass.getuser
然后,阅读有关凭据(7) 的信息。然后您就知道每个进程都有其 uid(请参阅getuid(2)和geteuid)。该uid是一个数字(Windows 上可能的等价物是SID)。从该号码中,您可能会在 Python pwd.getpwuid 中使用getpwuid(3)获得“登录名”
在非常罕见的病理情况下,你甚至可以有一些UID其中有没有“登录名”(这可能,例如,发生与旧工艺的UID你已经从你删除的运行过程中/etc/passwd,看到的passwd(5) )
在病理情况下,USER&LOGNAME环境变量和getuid/geteuid后跟getpwuid可以给出不同的“登录名”,然后您必须决定您想要哪个(这相当于准确定义“登录名”对您意味着什么)。
您应该阅读ALP以了解有关 Linux 编程的更多信息,并将从那里获得的知识(ALP 从 C API 的角度解释事物)应用到 Python。
如果您需要主目录,通常的做法是使用HOME环境变量(但同样,您可能会遇到未设置或错误的病理情况;在这种极少数情况下,您需要定义您真正想要的内容。)。
附注。在 Unix 系统上,我不明白为什么你需要一个登录名。常见的习惯用法是根据uid进行推理。
TA贡献1836条经验 获得超4个赞
os.environ是一个字典,其中包含各种类型的环境变量。在这里USERNAME,LOGNAME,USER等是系统状态的环境变量。所以根据操作系统和当前用户的类型,我们可以找到那些环境变量。当我们以普通用户身份登录 时Ubuntu,我们拥有 all USERNAME, LOGNAMEandUSER在系统状态环境变量中,但是当我们以root用户身份登录时,我们拥有USER和LOGNAME系统状态环境变量。对于普通用户,请查看下面的代码Ubuntu。
import os
# From os.environ, you can read USERNAME and LOGNAME
os.environ['USERNAME']
os.environ['LOGNAME']
添加回答
举报