社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

是否可以使用python找到客户机pc的用户名?(不是服务器的用户名)[重复]

Hariharan AR • 4 年前 • 881 次点击  

有没有一种在Python中获取当前用户用户名的可移植方法(即至少在Linux和Windows下都可以使用的方法)。它会像 os.getuid :

>>> os.getuid()
42
>>> os.getusername()
'slartibartfast'

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/50868
 
881 次点击  
文章 [ 12 ]  |  最新文章 4 年前
ThisGuyCantEven
Reply   •   1 楼
ThisGuyCantEven    4 年前

仅使用标准python libs:

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

适用于Windows、Mac或Linux

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

from os import environ,getcwd
user = (lambda: environ["USERNAME"] if "C:" in getcwd() else environ["USER"])()
Michael Kropat
Reply   •   2 楼
Michael Kropat    10 年前

通过Windows API可以在Windows上获得当前用户名,不过通过ctypes FFI调用有点麻烦( GetCurrentProcess → OpenProcessToken → GetTokenInformation → LookupAccountSid ).

我写了一个小模块,可以直接从Python中实现这一点, getuser.py . 用法:

import getuser
print(getuser.lookup_username())

它可以在Windows和*nix上运行(后者使用 pwd 其他答案中描述的模块)。

decalage
Reply   •   3 楼
decalage    14 年前

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

用法:

import plx

username = plx.get_username()

(在Windows上需要win32扩展)

dylnmc
Reply   •   4 楼
dylnmc    9 年前

至少对于UNIX来说,这是可行的。。。

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

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

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

在UNIX上,它返回您的用户名,但在Windows上,它返回您的用户组slash,您的用户名。

--

即。

UNIX返回:“用户名”

Windows返回:“域/用户名”

--

这很有趣,但可能并不理想,除非你在终端机里做些什么。。。在这种情况下,您可能会使用 os.system 首先。例如,前一段时间我需要将我的用户添加到一个组中,所以我添加了(请注意,这是在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中的某些应用程序中可能会有帮助。

anatoly techtonik
Reply   •   5 楼
anatoly techtonik    10 年前

合并 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()
user966588user966588
Reply   •   6 楼
user966588user966588    10 年前

给我用 os 模块看起来最适合移植:在Linux和Windows上都最适合。

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]           

输出:

窗户:

用户主目录:C:\用户\我的用户

用户名:myuser

Linux系统:

用户的home Dir:/root

用户名:root

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

HezniK
Reply   •   7 楼
HezniK    10 年前

如果您需要这个来获取用户的home dir,那么下面的目录可以看作是可移植的(至少是win32和linux),是标准库的一部分。

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

你也可以分析这样的字符串,只得到最后一个路径组件(即用户名)。

见: os.path.expanduser

ncica Adam
Reply   •   8 楼
ncica Adam    4 年前

这些可能有用。我不知道它们作为服务运行时的行为。它们不是便携式的,但那就是 os.name if 声明是为了。

win32api.GetUserName()

win32api.GetUserNameEx(...) 

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

Aaron McDaid Nadia Alramli
Reply   •   9 楼
Aaron McDaid Nadia Alramli    5 年前

您可以使用:

os.environ.get('USERNAME')

os.environ.get('USER')

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

Marcin Augustyniak
Reply   •   10 楼
Marcin Augustyniak    14 年前

您还可以使用:

 os.getlogin()
GreenMatt Liam Chasteen
Reply   •   11 楼
GreenMatt Liam Chasteen    13 年前

你最好的办法就是合并 os.getuid() 具有 pwd.getpwuid() :

import os
import pwd

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

有关更多详细信息,请参阅pwd文档:

http://docs.python.org/library/pwd.html

omerbp Konstantin Tenzin
Reply   •   12 楼
omerbp Konstantin Tenzin    7 年前

看看 getpass 模块

import getpass
getpass.getuser()
'kostya'

可用性:Unix、Windows


请按以下注释填写 此函数查看各种环境变量的值以确定用户名。因此,不应将此函数用于访问控制目的(或可能用于任何其他目的,因为它允许任何用户模拟任何其他目的)。 "