Python社区  »  Python

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

Hariharan AR • 1 月前 • 72 次点击  

有没有一种在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
 
72 次点击  
分享到微博
文章 [ 12 ]  |  最新文章 1 月前
ThisGuyCantEven
Reply   •   1 楼
ThisGuyCantEven    3 月前

仅使用标准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    6 年前

通过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    9 年前

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

用法:

import plx

username = plx.get_username()

(在Windows上需要win32扩展)

dylnmc
Reply   •   4 楼
dylnmc    5 年前

至少对于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    6 年前

合并 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    6 年前

给我用 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    6 年前

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

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

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

见: os.path.expanduser

ncica Adam
Reply   •   8 楼
ncica Adam    5 月前

这些可能有用。我不知道它们作为服务运行时的行为。它们不是便携式的,但那就是 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    1 年前

您可以使用:

os.environ.get('USERNAME')

os.environ.get('USER')

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

Marcin Augustyniak
Reply   •   10 楼
Marcin Augustyniak    10 年前

您还可以使用:

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

你最好的办法就是合并 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    3 年前

看看 getpass 模块

import getpass
getpass.getuser()
'kostya'

可用性:Unix、Windows


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