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

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']
添加回答
舉報