我在树莓派3b上使用ubuntu mate。有没有一种简单的方法可以执行以下操作:
/EXCLUDE:
(从Windows)?当我尝试在Linux上使用它时,出现此错误:
import os
name = os.getlogin()
print(name)
答案 0 :(得分:1)
os.environ
是一个字典,其中包含各种类型的环境变量。这里的USERNAME
,LOGNAME
,USER
等是系统状态环境变量。因此,根据操作系统和当前用户的类型,我们可以找到那些环境变量。 当我们以普通用户身份登录Ubuntu
时,所有USERNAME
,LOGNAME
和USER
都处于系统状态环境变量中,但是当我们以{{1}身份登录时}用户,我们在系统状态环境变量中有root
和USER
。 请在LOGNAME
中查看以下普通用户代码。
Ubuntu
答案 1 :(得分:0)
您需要定义“登录名” (以及为什么)。在细节上,它并不是那么简单(而且我不确定您是否了解它的确切含义,即使在Windows上,我也不知道)。请注意,os.getlogin
已被记录以使用controlling terminal(在the TTY demystified,pty(7),tty(4)和在某些情况下(例如,crontab(5)工作,通过ssh
启动了远程命令,等等...),您根本没有。
您可以使用一些环境变量。请参见environ(7)和getenv(3)(并找到其Python等效项,可能是os.environ)。在大多数情况下(在某些交互式会话中),USER
和LOGNAME
环境变量都会给您一些“登录名”。在病理情况下,它们可能丢失或不同(或者不正确,请考虑setuid程序)。 Python具有getpass.getuser
然后,阅读有关credentials(7)的信息。然后,您知道每个进程都有其uid(请参见getuid(2)和geteuid
)。 uid是一个数字(在Windows上可能是SID)。在Python getpwuid(3)中,您可以使用pwd.getpwuid从该数字中获得一个“登录名”
在非常罕见的病理情况下,您甚至可能有一个进程使用某些没有“登录名”的uid(例如,这可能是由于运行在您从{{1 }},请参见passwd(5))
在病理情况下,/etc/passwd
和USER
环境变量以及LOGNAME
/ getuid
后跟geteuid
可能会导致不同 “登录名”,那么您必须决定要使用哪一个(确切地等同于 定义“登录名”对您的含义)。
您应该阅读ALP,以了解有关Linux编程的更多信息,并将从中获得的知识(ALP从C API的角度解释事情)应用于Python。
如果您需要home directory,通常的想法是使用getpwuid
环境变量(但同样,在病理情况下,它可能是未设置或错误的;在这种罕见的情况下,您需要定义您真正想要的东西。)
PS。在Unix系统上,我通常不理解为什么需要登录名 name 。常见的习惯用法是根据uid进行推理。