Python 获取windows下硬件数据信息(CPU,内存,英特尔、英伟达、AMD显卡使用率及详细信息)

这篇具有很好参考价值的文章主要介绍了Python 获取windows下硬件数据信息(CPU,内存,英特尔、英伟达、AMD显卡使用率及详细信息)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:最近一直在做关于显卡数据采集的调研工作,也在github上看到了一些三方库比如Python和golang的psutil, python: gpustart,再或者通过wmi或者windowsApi等底层接口 但是都只能获取到显卡的名称以及厂家信息等 无法真正意义上获取到显卡占用率等数据 在或者只能获取到英伟达的显卡数据 (该数据都是通过英伟达所开放出来的命令工具所获取到的) 后通过阅读C++ 的一个windows插件 发现他在底层使用了一个叫openhardwaremonitor的动态库 后开始尝试
结果:
python 查看显卡,c#,python,windows,经验分享
虽然可以在win系统上获取到amd和英伟达以及英特尔显卡的使用率 但是并不准确

结果虽然差强人意,但是起码指明了一道方向 后来通过github上查看该项目的描述时得知 该动态库是从另外一个库中迁移出来的分支 LibreHardwareMonitor

LibreHardwareMonitor
下载地址:下载LibreHardwareMonitor.dll
一个C#实线的可与底层系统进行交互的动态库
2.7start 被众多插件软件所引用
python 查看显卡,c#,python,windows,经验分享C#语言的动态库,那么在python中如何使用?
pythonnet (一个用python解析.net的三方库 实现了.dll文件的动态引用功能)
安装: pip install pythonnet
使用:

```python
 import clr  # pythonnet 
 clr.AddReference(dll)# 加载dll动态库
 # 将需要使用的动态库通过 from import进行导入(因libreHardwareMonitor.lib没有文档 所以按照这种导入即可)
 from LibreHardwareMonitor.Hardware import Computer
 computer = Computer() # 正常实例化即可
```

我们如何知道LibreHardwareMonitor的参数都有哪些呢? 可以通过github上的描述进行查看 这是一个c#的示例
python 查看显卡,c#,python,windows,经验分享
通过该示例 我们可以看到 关于computer初始化完成后有几个属性 可以控制当前.dll动态库对哪些数据进行获取
本次只对该3个参数进行使用, 感兴趣的可以去尝试一下另外4个参数
1. IsCpuEnabled 布尔值 获取CPU时为true
2. IsGpuEnabled 布尔值 获取GPU时为true
3. IsMemoryEnabled 布尔值 获取内存时为true
使用:

import clr
import os, sys
clr.AddReference(path + './LibreHardwareMonitorLib') # 这里不需要加后缀.dll 内部会自动拼接
from LibreHardwareMonitor.Hardware import Computer

computer_tmp = Computer()  # 实例这这个类
# computer_tmp.IsCpuEnabled = True  # 获取CPU时用
computer_tmp.IsGpuEnabled = True  # 获取GPU时用
# computer_tmp.IsMemoryEnabled = True  # 获取内存时用
# self.computer_tmp.IsNetworkEnabled = True  # 获取网卡数据时使用
computer_tmp.Open()

print(len(computer_tmp.Hardware))

for computer in computer_tmp.Hardware:
    computer.Update()
    data_dict = []
    for s in computer.Sensors:
        print("名称为:", s.Name)
        # print("元器件名称:", s.Identifier)
        print("类型为:", s.SensorType)
        print("值是:", s.Value)
        sensor_type = str(s.SensorType)

        if sensor_type == "Load":
            data_dict.append({
                str(s.Name).replace("D3D ", ""): s.Value
            })
    print(data_dict)

结果:
python 查看显卡,c#,python,windows,经验分享
参数:
Hardware:对应python中的列表 对应的是Computer中为true的属性值
Hardware[index].Sensors : 对应的是获取到的具体数据
属性:
Name: 元器件名称
Identifier:资源标识符
SensorType:硬件类型 想起查看下方描述
Parent: 所属父级元器件
Hardware[index].Sensors.SensorType:当前获取到的数据类型(如果存在则显示)
python 查看显卡,c#,python,windows,经验分享
具体实现:
FastApi: 异步web开发框架,提供api访问
pythonnet: 访问.dll文件获取底层交互能力
psutil: 获取内存的具体使用(LibreHardwareMonitor只提供了负载值 未提供对应的总内存以及使用内存的详细值)

完整代码main.py

import uvicorn
from fastapi import FastAPI, APIRouter
from fastapi.middleware.cors import CORSMiddleware
import clr
import yaml, os, sys
import psutil
from starlette.responses import JSONResponse

sys.path.append(os.getcwd())

app = FastAPI(title="设备信息获取",
              description="用于获取windows下显卡,内存,cpu,网卡等使用情况",
              version="v0.1")


class GetDeviceInfo:

    def __init__(self, dll: str):

        clr.AddReference(dll)
        from LibreHardwareMonitor.Hardware import Computer
        self.computer_tmp = Computer()  # 实例这这个类
        self.computer_tmp.IsCpuEnabled = True  # 获取CPU温度时用
        self.computer_tmp.IsGpuEnabled = True  # 获取GPU温度时用
        self.computer_tmp.IsMemoryEnabled = True  # 获取内存时用
        # self.computer_tmp.IsNetworkEnabled = True  # 获取网卡时用
        self.computer_tmp.Open()

    @staticmethod
    def memory_info()->tuple:
        p = psutil.virtual_memory()
        return p.total / 1024 / 1024, p.used / 1024 / 1024

    def params_hardware(self, index: int) -> dict:
        hard = self.computer_tmp.Hardware[index]
        hard.Update()
        device_data = {}

        for i in hard.Sensors:
            sensor_type = str(i.SensorType)
            if sensor_type == "Load" and sensor_type not in device_data:
                device_data["Name"] = hard.Name
                device_data["Load"] = i.Value
            if index == 2 and "/temperature" in str(i.Identifier):
                device_data["temperature"] = i.Value
            if sensor_type == "Load" and index == 2:
                device_data[str(i.Name).replace("D3D ", "")] = i.Value
        if index == 1:
            total, used = self.memory_info()
            device_data['total'] = total
            device_data['used'] = used
        return device_data

    def run(self):
        data_list = []
        type_list = ["CPU", "memory", "GPU"]
        com_len = len(self.computer_tmp.Hardware)
        if com_len > len(type_list):
            number = com_len - len(type_list)
            [type_list.append("other" + str(i)) for i in range(number)]
        for index in range(com_len):
            device_info = self.params_hardware(index)
            device_info['type'] = type_list[index]
            data_list.append(device_info)
        return data_list


class Router:
    routerApi = APIRouter()

    def __init__(self):
    	# 如果使用Pyinstaller -F 进行编译时,将这里放开, 解决相对路径下找不到可用的.dll文件问题
        # path = os.path.dirname(sys.executable)
        # self.device = GetDeviceInfo(path + "/lib/LibreHardwareMonitorLib")
		
		self.device = GetDeviceInfo("./lib/LibreHardwareMonitorLib")
    async def get_device_info(self):
        return JSONResponse(
            status_code=200,
            content={
                "message": "success!",
                "code": 200,
                "data": self.device.run()
            }
        )

    def router_list(self):
        self.routerApi.add_api_route("/deviceInfo", self.get_device_info, methods=["GET"])


def init_service():
	# 处理浏览器请求时会出现跨域情况
    app.add_middleware(CORSMiddleware,
                       allow_origins="*",
                       allow_credentials=True,
                       allow_methods=["*"],
                       allow_headers=["*"], )
    router = Router()
    router.router_list()
    app.include_router(router.routerApi, prefix="/device")


init_service()
if __name__ == '__main__':
	# 也可通过配置文件配置相关启动的host以及域名
    #with open("config/config.yaml", mode='r+', encoding='utf-8') as f:
       # data = yaml.load(f.read(), Loader=yaml.Loader)
    uvicorn.run("__main__:app", host="0.0.0.0", port=9969)

接口:
GET http://localhost:9969/device/deviceInfo
结果:
python 查看显卡,c#,python,windows,经验分享
该服务可直接运行 也可编译后通过.exe进行运行 当前仅支持windows下 暂未支持linux以及mac
已上传至https://github.com/yuanhuihui1203/GetDeviceInfo 各位大佬可以点击一下start支持!文章来源地址https://www.toymoban.com/news/detail-600584.html

到了这里,关于Python 获取windows下硬件数据信息(CPU,内存,英特尔、英伟达、AMD显卡使用率及详细信息)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • go获取服务器信息(主机、CPU、内存、硬盘)

    使用 github.com/shirou/gopsutil 库来获取机器信息,您可以按照以下步骤进行:

    2024年02月09日
    浏览(39)
  • Windows获取硬件信息

    因项目需要,一直在网上调研获取Windows硬件信息的解决方案,要求稳定性高、可靠性强、兼容性好。在网上绝大多数的博主推荐使用WMIC获取硬件信息,WMIC是微软官方推出的一款Windows Management Instrumentation (WMI)命令行实用工具,在使用了一段时间后发现,WMIC在一些机器上会出

    2024年01月16日
    浏览(34)
  • java获取当前服务器状态cpu、内存、存储等核心信息

    目录 1.需要导入依赖包  2.系统自带参数 3.获取当前服务器状态cpu、内存、存储等核心信息  4.引入包后方法不存在  5. 获取的cpu利用率和任务管理器cpu利用率值差距问题   RESULT: RESULT:  需要引入下面的包:  就是需要配置在 CentralProcessor 实例化之前:配置上也会有差距,相

    2024年02月03日
    浏览(34)
  • 获取windows硬件、软件信息的方法

    1,方法1 systeminfo 该命令是Windows中用于显示关于计算机及其操作系统的详细配置信息,包括操作系统配置、安全信息、产品 ID 和硬件属性,如 RAM、磁盘空间和网卡和补丁信息等。 例如,我们把信息格式化,加以利用方法如下 : 上面输出的信息分为表头,正文两行输出,我

    2024年02月04日
    浏览(27)
  • 获取linuxIP、内存、cpu、磁盘IO等信息的Shell脚本及其讲解

    grep是一个在Unix和Unix-like系统上使用的命令行工具,用于在文本文件中搜索匹配指定模式的行。它的名字来自于\\\"global regular expression print\\\"(全局正则表达式打印)的缩写。grep的基本用法是通过指定一个正则表达式模式和一个文件名(或者从标准输入读取数据),来查找和打印

    2024年04月27日
    浏览(22)
  • SpringBoot自主监控,获取服务信息、JVM、CPU、内存、磁盘、堆、线程、GC等

    1. 简介   在日常开发中一些关键的业务服务,期望在高并发状态下可以正常工作,或在异常情况时可以记录当时的性能信息,所以就需要进行监控。常见的监控例如: Prometheus 可以实现这个需求,如果需要更加简单方便的自主监控能力,可以引入本博客中的方案。 2. 相关博

    2024年02月15日
    浏览(34)
  • Java 使用oshi获取当前服务器状态cpu、内存、存储等核心信息

    OSHI 是基于 JNA 的(本地)操作系统和硬件信息库。它不需要安装任何其他额外的本地库,旨在提供一种跨平台的实现来检索系统信息,例如操作系统版本、进程、内存和 CPU 使用率、磁盘和分区、设备、传感器等。 使用 OSHI 可以对应用程序进行监控,可以对应用程序所在的服

    2024年02月03日
    浏览(36)
  • 可测含多进程的app-- python调用adb命令获取Android App应用的性能数据:CPU、GPU、内存、电池、耗电量(含python源码)

    python脚本通过os.popen()方法运行adb命令,获取性能数据,将性能数据保存在csv文件并算出均值、最大值、最小值。 本脚本可测试一个app包含多个进程的场景,可以获取 每个进程的性能数据 。 2.1 软件环境 具备python环境,Android环境 需要python库:os, csv, time, datetime, sys,time,panda

    2024年02月13日
    浏览(31)
  • 快速查看主板、CPU、显卡等硬件信息的方法

    很多人不知道自己电脑的主板等硬件信息在哪查看,今天教大家一招,不用装某大师,直接浏览器里输入“英特尔® 驱动程序和支持助理”地址即可快速查看。 https://www.intel.cn/content/www/cn/zh/support/intel-driver-support-assistant.html 内容显示十分详细。 我的主板信息(也没啥好保密的

    2023年04月11日
    浏览(43)
  • 程序员基础的硬件知识(cpu、主板、显卡、内存条等)

    一、综合简介 cpu: 负责运算数据,就等于你的大脑运算速度。 显卡: 本来没有显卡,后来因为大家对图片要求越来越高,视频要求越来越高,啥都让cpu算太累了,于是分出来一个,专门用来计算图片数据的,叫做显卡。 内存条: 相当于人的口袋,你出门时(开机时),能

    2024年02月01日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包