什么是获取当前用户的用户名的可移植方法(例如Linux和Windows) ?类似于os.getuid()的东西会很好:
>>> os.getuid()
42
# Does not currently exist in Python
>>> os.getusername()
'slartibartfast'
pwd模块仅适用于Unix。有些人认为,在某些情况下,在Windows下获取用户名可能会很复杂(例如,作为Windows服务运行)。
什么是获取当前用户的用户名的可移植方法(例如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.getlogin()
查看getpass模块
import getpass
getpass.getuser()
'kostya'
可用性:Unix, Windows
p.s.每个评论下面“这个函数查看各种环境变量的值来确定用户名。因此,该函数不应用于访问控制目的(或任何其他目的,因为它允许任何用户模仿任何其他用户)。”
窗口:
os.environ.get('USERNAME')
Linux:
os.environ.get('USER')
两个:
os.environ.get('USER', os.environ.get('USERNAME'))
请注意,用户可以修改环境变量,因此这是一个潜在的安全漏洞。使用这种方法,攻击者可以很容易地伪造他们的用户名。
这些可能有用。我不知道它们作为服务运行时表现如何。它们是不可移植的,但这就是os.name和ifstatement的用途。
win32api.GetUserName()
win32api.GetUserNameEx(...)
看到的: http://timgolden.me.uk/python/win32_how_do_i/get-the-owner-of-a-file.html
如果你需要这个来获取用户的home目录,下面可以被认为是可移植的(至少win32和linux),标准库的一部分。
>>> os.path.expanduser('~')
'C:\\Documents and Settings\\johnsmith'
此外,你可以解析这样的字符串,只得到最后的路径组件(即。用户名)。
看:os.path.expanduser