亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

對于新的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 關注
  • 191 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號