对于新的Linux用户,在python中获取登录名的简单方法是什么?

时间:2019-01-13 09:52:06

标签: python linux ubuntu operating-system

我在树莓派3b上使用ubuntu mate。有没有一种简单的方法可以执行以下操作:

/EXCLUDE:

(从Windows)?当我尝试在Linux上使用它时,出现此错误:

import os
name = os.getlogin()
print(name)

2 个答案:

答案 0 :(得分:1)

  

os.environ是一个字典,其中包含各种类型的环境变量。这里的USERNAMELOGNAMEUSER等是系统状态环境变量。因此,根据操作系统和当前用户的类型,我们可以找到那些环境变量。   当我们以普通用户身份登录Ubuntu时,所有USERNAMELOGNAMEUSER都处于系统状态环境变量中,但是当我们以{{1}身份登录时}用户,我们在系统状态环境变量中有rootUSER。   请在LOGNAME中查看以下普通用户代码。

Ubuntu

答案 1 :(得分:0)

您需要定义“登录名” (以及为什么)。在细节上,它并不是那么简单(而且我不确定您是否了解它的确切含义,即使在Windows上,我也不知道)。请注意,os.getlogin已被记录以使用controlling terminal(在the TTY demystifiedpty(7)tty(4)和在某些情况下(例如,crontab(5)工作,通过ssh启动了远程命令,等等...),您根本没有。

您可以使用一些环境变量。请参见environ(7)getenv(3)(并找到其Python等效项,可能是os.environ)。在大多数情况下(在某些交互式会话中),USERLOGNAME环境变量都会给您一些“登录名”。在病理情况下,它们可能丢失或不同(或者不正确,请考虑setuid程序)。 Python具有getpass.getuser

然后,阅读有关credentials(7)的信息。然后,您知道每个进程都有其uid(请参见getuid(2)geteuid)。 uid是一个数字(在Windows上可能是SID)。在Python getpwuid(3)中,您可以使用pwd.getpwuid从该数字中获得一个“登录名”

在非常罕见的病理情况下,您甚至可能有一个进程使用某些没有“登录名”的uid(例如,这可能是由于运行在您从{{1 }},请参见passwd(5)

在病理情况下,/etc/passwdUSER环境变量以及LOGNAME / getuid后跟geteuid可能会导致不同 “登录名”,那么您必须决定要使用哪一个(确切地等同于 定义“登录名”对您的含义)。

您应该阅读ALP,以了解有关Linux编程的更多信息,并将从中获得的知识(ALP从C API的角度解释事情)应用于Python。

如果您需要home directory,通常的想法是使用getpwuid环境变量(但同样,在病理情况下,它可能是未设置或错误的;在这种罕见的情况下,您需要定义您真正想要的东西。)

PS。在Unix系统上,我通常不理解为什么需要登录名 name 。常见的习惯用法是根据uid进行推理。