【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
是否有一种可移植的方式来获取Python中当前用户的用户名(即,至少在Linux和Windows上都可以使用)。 它将像os.getuid
一样os.getuid
:
>>> os.getuid()
42
>>> os.getusername()
'slartibartfast'
我四处搜寻,很惊讶没有找到一个明确的答案(尽管也许我只是在谷歌搜索方面很差)。 pwd模块提供了一种相对简单的方法,例如在Linux下,但是在Windows上却没有。 一些搜索结果表明,在某些情况下(例如,作为Windows服务运行),在Windows下获取用户名可能很复杂,尽管我尚未对此进行验证。
#1楼
如果您需要此文件来获取用户的主目录,则可以将以下内容视为可移植的(至少是win32和linux),是标准库的一部分。
>>> os.path.expanduser('~')
'C:\\Documents and Settings\\johnsmith'
您也可以解析这样的字符串以仅获取最后的路径组件(即用户名)。
#2楼
您还可以使用:
os.getlogin()
#3楼
基于其他答案的pwd
和getpass
组合方法:
try:
import pwd
except ImportError:
import getpass
pwd = None
def current_user():
if pwd:
return pwd.getpwuid(os.geteuid()).pw_name
else:
return getpass.getuser()
#4楼
这些可能有效。 我不知道它们作为服务运行时的行为。 它们不是可移植的,但这就是os.name
和if
语句的用途。
win32api.GetUserName()
win32api.GetUserNameEx(...)
参见: http : //timgolden.me.uk/python/win32_how_do_i/get-the-owner-of-a-file.html
#5楼
您可以通过Windows API获得Windows上的当前用户名,尽管通过ctypes FFI( GetCurrentProcess → OpenProcessToken → GetTokenInformation → LookupAccountSid )调用有点麻烦。
我编写了一个小模块,可以直接从Python进行此操作,即getuser.py 。 用法:
import getuser
print(getuser.lookup_username())
它可以在Windows和* nix上使用(后者使用了pwd
模块,如其他答案中所述)。
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3154532