什么是获取当前用户的用户名的可移植方法(例如Linux和Windows) ?类似于os.getuid()的东西会很好:

>>> os.getuid()
42

# Does not currently exist in Python
>>> os.getusername()
'slartibartfast'

pwd模块仅适用于Unix。有些人认为,在某些情况下,在Windows下获取用户名可能会很复杂(例如,作为Windows服务运行)。


当前回答

只使用标准的python库:

from os import environ,getcwd
getUser = lambda: environ["USERNAME"] if "C:" in getcwd() else environ["USER"]
user = getUser()

适用于Windows(如果您在C盘),Mac或Linux

或者,你可以通过立即调用删除一行:

from os import environ,getcwd
user = (lambda: environ["USERNAME"] if "C:" in getcwd() else environ["USER"])()

其他回答

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

Psutil提供了一种可移植的方法,它不像getpass解决方案那样使用环境变量。它不太容易出现安全问题,应该是目前公认的答案。

import psutil

def get_username():
    return psutil.Process().username()

在底层,它结合了unix的基于getpuid的方法和Windows的GetTokenInformation方法。

我在一段时间前写了plx模块,以便在Unix和Windows上以可移植的方式获取用户名(以及其他东西): http://www.decalage.info/en/python/plx

用法:

import plx

username = plx.get_username()

(在Windows上需要win32扩展)

这对我来说很管用:

import os
os.cmd("whoami")
print (os.cmd("whoami"))

查看getpass模块

import getpass
getpass.getuser()
'kostya'

可用性:Unix, Windows


p.s.每个评论下面“这个函数查看各种环境变量的值来确定用户名。因此,该函数不应用于访问控制目的(或任何其他目的,因为它允许任何用户模仿任何其他用户)。”