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

我在树莓派 3b 上使用 ubuntu mate。有没有一种简单的方法来做类似的事情:


import os

name = os.getlogin()

print(name)

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


Traceback (most recent call last):


  File "(this is a less than sign)pyshell#3(this is a greater than sign)", line 1, in <module>


print(os.getlogin())

OSError: [Errno 25] Inappropriate ioctl for device


慕桂英546537
浏览 165回答 2
2回答

青春有我

您需要定义什么是“登录名”(以及为什么需要它)。在细节中,它并不是那么简单(我不确定你是否完全理解它到底是什么,即使是在我不知道的 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进行推理。

HUH函数

os.environ是一个字典,其中包含各种类型的环境变量。在这里USERNAME,LOGNAME,USER等是系统状态的环境变量。所以根据操作系统和当前用户的类型,我们可以找到那些环境变量。当我们以普通用户身份登录 时Ubuntu,我们拥有 all USERNAME, LOGNAMEandUSER在系统状态环境变量中,但是当我们以root用户身份登录时,我们拥有USER和LOGNAME系统状态环境变量。对于普通用户,请查看下面的代码Ubuntu。import os# From os.environ, you can read USERNAME and LOGNAME&nbsp;os.environ['USERNAME']os.environ['LOGNAME']
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python