2 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊
您需要定義什么是“登錄名”(以及為什么需要它)。在細(xì)節(jié)中,它并不是那么簡單(我不確定你是否完全理解它到底是什么,即使是在我不知道的 Windows 上)。該通知os.getlogin被記載為使用控制終端(進(jìn)一步了解這些中的TTY揭秘, PTY(7) ,TTY(4) ),并且在一些情況下(例如一個(gè)的crontab(5)工作,遠(yuǎn)程命令開始通ssh等..) 你沒有。
您可以使用一些環(huán)境變量。請參閱environ(7)和getenv(3)(并找到它的 Python 等效項(xiàng),可能是os.environ)。在大多數(shù)情況下(在一些交互式會(huì)話中),USER和LOGNAME環(huán)境變量都會(huì)給你一些“登錄名”。在病理情況下,它們可能丟失或不同(或不正確,想想setuid程序)。Python有g(shù)etpass.getuser
然后,閱讀有關(guān)憑據(jù)(7) 的信息。然后您就知道每個(gè)進(jìn)程都有其 uid(請參閱getuid(2)和geteuid)。該uid是一個(gè)數(shù)字(Windows 上可能的等價(jià)物是SID)。從該號碼中,您可能會(huì)在 Python pwd.getpwuid 中使用getpwuid(3)獲得“登錄名”
在非常罕見的病理情況下,你甚至可以有一些UID其中有沒有“登錄名”(這可能,例如,發(fā)生與舊工藝的UID你已經(jīng)從你刪除的運(yùn)行過程中/etc/passwd,看到的passwd(5) )
在病理情況下,USER&LOGNAME環(huán)境變量和getuid/geteuid后跟getpwuid可以給出不同的“登錄名”,然后您必須決定您想要哪個(gè)(這相當(dāng)于準(zhǔn)確定義“登錄名”對您意味著什么)。
您應(yīng)該閱讀ALP以了解有關(guān) Linux 編程的更多信息,并將從那里獲得的知識(ALP 從 C API 的角度解釋事物)應(yīng)用到 Python。
如果您需要主目錄,通常的做法是使用HOME環(huán)境變量(但同樣,您可能會(huì)遇到未設(shè)置或錯(cuò)誤的病理情況;在這種極少數(shù)情況下,您需要定義您真正想要的內(nèi)容。)。
附注。在 Unix 系統(tǒng)上,我不明白為什么你需要一個(gè)登錄名。常見的習(xí)慣用法是根據(jù)uid進(jìn)行推理。

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超4個(gè)贊
os.environ是一個(gè)字典,其中包含各種類型的環(huán)境變量。在這里USERNAME,LOGNAME,USER等是系統(tǒng)狀態(tài)的環(huán)境變量。所以根據(jù)操作系統(tǒng)和當(dāng)前用戶的類型,我們可以找到那些環(huán)境變量。當(dāng)我們以普通用戶身份登錄 時(shí)Ubuntu,我們擁有 all USERNAME, LOGNAMEandUSER在系統(tǒng)狀態(tài)環(huán)境變量中,但是當(dāng)我們以root用戶身份登錄時(shí),我們擁有USER和LOGNAME系統(tǒng)狀態(tài)環(huán)境變量。對于普通用戶,請查看下面的代碼Ubuntu。
import os
# From os.environ, you can read USERNAME and LOGNAME
os.environ['USERNAME']
os.environ['LOGNAME']
添加回答
舉報(bào)