Is there a portable way to get the current username in Python?
是否有一种可移植的方法可以在python中获得当前用户的用户名(即至少在Linux和Windows下都可以使用的用户名)。它可以像
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
通过下面的评论:"这个函数看各种环境变量的值,以确定该用户的名字。因此,这个功能应该不在,她在访问控制用途的(或可能是任何其他用途,因为它允许任何用户"冒充任何其他)。
你最佳的赌注将是一个结合
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
我使用
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
不需要安装任何模块或扩展。
组合和方法
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域中的用户名"
——
它可能是有趣的,但需要做的东西,除非你是在理想的漫游终端的呢……你会在这案例可能会使用一个
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(后者作为一
在最简单的方式来获取当前用户名
1 | pip install username |
然后:
1 2 3 4 | import username print(username()) # your_username |
Works on Linux, macOS, and Windows