关于可移植性:有没有一种可移植的方法可以在python中获得当前用户名?

Is there a portable way to get the current username in Python?

是否有一种可移植的方法可以在python中获得当前用户的用户名(即至少在Linux和Windows下都可以使用的用户名)。它可以像os.getuid那样工作:

1
2
3
4
>>> os.getuid()
42
>>> os.getusername()
'slartibartfast'

我到处搜索,很惊讶没有找到一个明确的答案(尽管我可能只是在搜索糟糕)。pwd模块提供了一种相对简单的方法来实现这一点,比如说在Linux下,但是它不在Windows上。一些搜索结果表明,在某些情况下(例如,作为Windows服务运行),在Windows下获取用户名可能很复杂,尽管我还没有验证这一点。


看看哈里发的模块

1
2
3
import getpass
getpass.getuser()
'kostya'

可用性:UNIX,Windows

通过下面的评论:"这个函数看各种环境变量的值,以确定该用户的名字。因此,这个功能应该不在,她在访问控制用途的(或可能是任何其他用途,因为它允许任何用户"冒充任何其他)。


你最佳的赌注将是一个结合os.getuid()pwd.getpwuid()

1
2
3
4
5
import os
import pwd

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

参考文档的更多细节:pwd

http://docs.python.org /图书馆/ pwd.html


你可以这样使用:

1
 os.getlogin()


也许你可以使用:

1
os.environ.get('USERNAME')

1
os.environ.get('USER')

但它不会是安全的,因为环境变量可以改变的。


工作论文系列。我不知道当他们的行为作为一个服务运行。他们不是便携式的,但这就是"os.name"和"如果"是for语句。

win32api.getusername()

win32api.getusernameex(……)

湖:http:/ / / / timgolden.me.uk Python知识_ Win32 _ _ do I / get-the-owner-of-a-file.html


如果你需要这把用户的家庭你,下面可以被视为便携式(Win32和Linux至少部分a)标准库。

1
2
>>> os.path.expanduser('~')
'C:\\Documents and Settings\\johnsmith'

所以,你可以去搜索字符串解析组件负载路径(只读)。用户的名称)。

湖:os.path.expanduser


我使用os模块看起来最好的作品是最好的可移植性:在Linux和Windows。

1
2
3
4
5
6
7
8
9
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]

输出:

窗口:

User's home Dir: C:\Users\myuser

username: myuser

Linux:

User's home Dir: /root

username: root

不需要安装任何模块或扩展。


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

1
2
3
4
5
6
7
8
9
10
11
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()

for UNIX,至少,这个作品……

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

编辑:我只是离开它,这在Windows和UNIX

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

在Unix它返回您的用户名,但在您的Windows,它返回用户的集团,湿地,你的用户名。

——

IU

UNIX归来:"用户名"

回报:"Windows域中的用户名"

——

它可能是有趣的,但需要做的东西,除非你是在理想的漫游终端的呢……你会在这案例可能会使用一个os.system开始。例如,一段时间前,我需要添加到我的用户群,那么我做的(这是在Linux下,你的心灵)

1
2
3
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"

我觉得这是更容易阅读和你不输入密码或哈里发。

我觉得有"域用户"在某些应用程序可以在Windows中。


我写了一些时间前的PLX模块得到用户的名字(在UNIX和Windows的便携式单(在其他的东西):http:/ / / / www.decalage.info Python PLX

用法:

1
2
3
import plx

username = plx.get_username()

(它需要在Windows的Win32扩展)


你可以得到当前的用户名的Windows下的要通过Windows API,虽然它是一个麻烦的一位ctypes FFI通过invoke(getcurrentprocess openprocesstoken gettokeninformation→→→lookupaccountsid)。

我写的一个小模块,可以从Python做直,getuser.py。用法:

1
2
import getuser
print(getuser.lookup_username())

它是在Windows和*nix(后者作为一pwd模块使用中描述的其他的答案)。


在最简单的方式来获取当前用户名username是肯定的。

1
pip install username

然后:

1
2
3
4
import username

print(username())
# your_username

Works on Linux, macOS, and Windows