为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕桂英546537 2021-10-10 14:42:39
我在树莓派 3b 上使用 ubuntu mate。有没有一种简单的方法来做类似的事情:import osname = 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
查看完整描述

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进行推理。


查看完整回答
反对 回复 2021-10-10
?
HUH函数

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']


查看完整回答
反对 回复 2021-10-10
  • 2 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信