使用 Python 的 Windows 用户名(在域中)的全名

Jea*_* T. 7 windows python windows-domain

我想用 Python 检索 Windows 计算机用户的全名。

我找到了等效的批处理命令:

net user "%USERNAME%" /domain | FIND /I "Full Name"
Run Code Online (Sandbox Code Playgroud)

返回全名(例如Full Name John Doe)。

我已经通过使用完成了以下方法,subprocess但我想知道是否有更原生的方法可以使用某些Python模块来完成此操作。

import getpass
import subprocess
import re

username = getpass.getuser()
p = subprocess.Popen(
    'net user %s /domain' % username,
    stdout=subprocess.PIPE, stderr=subprocess.PIPE
)
info, err = p.stdout.read(), p.stderr.read()
full_name = re.findall(r'Full Name\s+(.*\S)', info)

print(full_name)
Run Code Online (Sandbox Code Playgroud)

谢谢

Jea*_* T. 5

根据@Bob的评论,以下内容在Windows上运行并且是纯Python,但需要安装pywin32(基于此Recipe):

import win32api
import win32net

user_info = win32net.NetUserGetInfo(win32net.NetGetAnyDCName(), win32api.GetUserName(), 2)
full_name = user_info["full_name"]
Run Code Online (Sandbox Code Playgroud)

问题中仅使用的脚本的另一个较短版本subprocess是:

import subprocess

name = subprocess.check_output(
   'net user "%USERNAME%" /domain | FIND /I "Full Name"', shell=True
)
full_name = name.replace(b"Full Name", b"").strip()
Run Code Online (Sandbox Code Playgroud)

注意:对于 Python 2.7,在最后一个示例中,您需要将最后一行更改为 ...replace("Full Name", "").strip()