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

>>> os.getuid()
42

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

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


当前回答

至少对于UNIX,这是可行的……

import commands
username = commands.getoutput("echo $(whoami)")
print username

编辑: 我刚刚查了一下,这在Windows和UNIX上都适用:

import commands
username = commands.getoutput("whoami")

在UNIX上,它返回用户名,但在Windows上,它返回用户组,斜杠,用户名。

--

I.E.

UNIX返回:"username"

Windows返回:"domain/username"

--

这很有趣,但可能并不理想,除非你在终端上做一些事情……在这种情况下,您可能会使用os。首先是系统。例如,一段时间前,我需要将我的用户添加到一个组,所以我这样做了(注意,这是在Linux中)

import os
os.system("sudo usermod -aG \"group_name\" $(whoami)")
print "You have been added to \"group_name\"! Please log out for this to take effect"

我觉得这更容易阅读,你不需要导入pwd或getpass。

我还觉得在Windows中的某些应用程序中使用“域/用户”可能会有所帮助。

其他回答

这些可能有用。我不知道它们作为服务运行时表现如何。它们是不可移植的,但这就是os.name和ifstatement的用途。

win32api.GetUserName()

win32api.GetUserNameEx(...) 

看到的: http://timgolden.me.uk/python/win32_how_do_i/get-the-owner-of-a-file.html

这对我来说很管用:

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

至少对于UNIX,这是可行的……

import commands
username = commands.getoutput("echo $(whoami)")
print username

编辑: 我刚刚查了一下,这在Windows和UNIX上都适用:

import commands
username = commands.getoutput("whoami")

在UNIX上,它返回用户名,但在Windows上,它返回用户组,斜杠,用户名。

--

I.E.

UNIX返回:"username"

Windows返回:"domain/username"

--

这很有趣,但可能并不理想,除非你在终端上做一些事情……在这种情况下,您可能会使用os。首先是系统。例如,一段时间前,我需要将我的用户添加到一个组,所以我这样做了(注意,这是在Linux中)

import os
os.system("sudo usermod -aG \"group_name\" $(whoami)")
print "You have been added to \"group_name\"! Please log out for this to take effect"

我觉得这更容易阅读,你不需要导入pwd或getpass。

我还觉得在Windows中的某些应用程序中使用“域/用户”可能会有所帮助。

你还可以使用:

os.getlogin()

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