有没有一种可移植的方法来获取Python中的当前用户名?

偶尔善良 提交于 2020-01-07 18:48:14

【推荐】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'

您也可以解析这样的字符串以仅获取最后的路径组件(即用户名)。

参见: os.path.expanduser


#2楼

您还可以使用:

 os.getlogin()

#3楼

基于其他答案的pwdgetpass组合方法:

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.nameif语句的用途。

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( GetCurrentProcessOpenProcessTokenGetTokenInformationLookupAccountSid )调用有点麻烦。

我编写了一个小模块,可以直接从Python进行此操作,即getuser.py 。 用法:

import getuser
print(getuser.lookup_username())

它可以在Windows和* nix上使用(后者使用了pwd模块,如其他答案中所述)。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!