python - python有一个可移植的方法来获取当前用户名?

  显示原文与译文双语对照的内容

是否有可以移植的方式来获取 python ( 例如,在Linux和 Windows 下工作,至少) 中用户的当前用户名。 它就像 os.getuid:


>>> os.getuid()
42
>>> os.getusername()
'slartibartfast'

我在google上搜索了一下,很惊讶没有找到一个明确的答案( 虽然也许我只是在搜索糟糕的谷歌) 。 pwd 模块提供了一个相对简单的方法来实现这一点,比如 Linux,但它不在 Windows 上。 一些搜索结果的建议下得到用户名可以在某些情况下复杂( e.g,作为 Windows 服务运行) Windows, 虽然我没有证实。

时间:

查看 getpass web 模块


>>> import getpass
>>> getpass.getuser()
'kostya'

可用性:Unix,Windows


p.s 。下面的注释"这里函数查看各种 环境变量的值以确定用户名。 因此,这里函数不应该依赖于访问控制目的( 或者任何其他用途,因为它允许任何用户模仿任何其他) 。 "

你最好将 os.getuid()pwd.getpwuid() 结合起来:


import os
import pwd

def get_username():
 return pwd.getpwuid( os.getuid() )[ 0 ]

有关详细信息,请参阅pwd文档:

http://docs.python.org/library/pwd.html

如果你需要这个来获取用户目录,下面可以认为是可移植的( win32和linux至少),这是标准库的一部分。


>>> os.path.expanduser('~')
'C:Documents and Settingsjohnsmith'

你也可以解析这样的字符串来获取最后一个路径组件( IE 。 用户名) 。

查看:os.path.expanduser

对于我来说,使用 os 模块看起来是最好的可移植性: 在Linux和 Windows 上工作最好。


import os

# Gives user's home directory
userhome = os.path.expanduser('~') 

print"User's home Dir:" + userhome

# Gives username by splitting path based on OS
print"username:" + os.path.split(userhome)[-1] 

输出:

windows :

用户目录主目录:c: usersmyuser

用户名:2

Linux:

用户目录的主目录:/根目录

用户名:根目录

无需安装任何模块或者扩展。

我在一段时间之前编写了plx模块以在Unix和 Windows ( 其中之一) 上以可移植方式获取用户名: http://www.decalage.info/en/python/plx

使用方法:


import plx

username = plx.get_username()

( 它需要 Windows 上的win32扩展)

结合了 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()

你可以得到当前用户名在 Windows 通过 Windows api,尽管这有点麻烦来调用通过 ctypes FFI ( GetCurrentProcessOpenProcessTokenGetTokenInformation01 ) 。

我写了一个小模块,可以直接从 python,getuser.py 。 使用方法:


import getuser
print(getuser.lookup_username())

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

...