You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python:电脑内存信息获取的更优实现方式咨询

更优的Python内存信息获取方案

嘿,很高兴你在琢磨优化内存信息获取的实现!手动解析系统文件或者调用free/systeminfo这类命令的方式,不仅容易因为系统版本差异出问题,代码也显得繁琐。这里有几个更靠谱、更优雅的实现思路,推荐给你:

首选:用psutil库(跨平台+极简API)

psutil是Python生态里最成熟的系统监控库之一,专门用来获取系统硬件、进程的各类信息,完全跨平台(Windows、Linux、macOS都能跑),而且API设计得非常直观,不用自己处理底层细节。

示例代码

先确保你安装了它:

pip install psutil

然后写获取内存信息的函数:

import psutil

def get_memory_info():
    # 获取内存的完整信息
    mem = psutil.virtual_memory()
    
    # 提取常用指标,单位统一转成GB(方便阅读)
    total_gb = round(mem.total / (1024 ** 3), 2)
    available_gb = round(mem.available / (1024 ** 3), 2)
    used_gb = round(mem.used / (1024 ** 3), 2)
    usage_percent = mem.percent
    
    return {
        "total_memory_gb": total_gb,
        "available_memory_gb": available_gb,
        "used_memory_gb": used_gb,
        "usage_percent": usage_percent
    }

# 测试调用
if __name__ == "__main__":
    print(get_memory_info())

这个方案的优势:

  • 不用自己解析命令输出或者系统文件,直接拿到结构化的数据
  • 跨平台兼容性拉满,换系统不用改代码
  • 除了内存,还能轻松扩展获取CPU、磁盘、进程的信息

无第三方库的原生实现(仅限特定平台)

如果因为环境限制不能用psutil,可以针对不同系统写原生实现,但缺点是需要维护多套代码,兼容性差:

Linux 下读取 /proc/meminfo

def get_memory_info_linux():
    mem_info = {}
    with open('/proc/meminfo', 'r') as f:
        for line in f:
            key, value = line.strip().split(':')
            mem_info[key] = int(value.strip().split()[0]) * 1024  # 转成字节
    
    total_gb = round(mem_info['MemTotal'] / (1024 ** 3), 2)
    available_gb = round(mem_info['MemAvailable'] / (1024 ** 3), 2)
    used_gb = round((mem_info['MemTotal'] - mem_info['MemAvailable']) / (1024 ** 3), 2)
    usage_percent = round((mem_info['MemTotal'] - mem_info['MemAvailable']) / mem_info['MemTotal'] * 100, 1)
    
    return {
        "total_memory_gb": total_gb,
        "available_memory_gb": available_gb,
        "used_memory_gb": used_gb,
        "usage_percent": usage_percent
    }

Windows 下用 ctypes 调用系统API

import ctypes

def get_memory_info_windows():
    class MEMORYSTATUSEX(ctypes.Structure):
        _fields_ = [
            ("dwLength", ctypes.c_ulong),
            ("dwMemoryLoad", ctypes.c_ulong),
            ("ullTotalPhys", ctypes.c_ulonglong),
            ("ullAvailPhys", ctypes.c_ulonglong),
            ("ullTotalPageFile", ctypes.c_ulonglong),
            ("ullAvailPageFile", ctypes.c_ulonglong),
            ("ullTotalVirtual", ctypes.c_ulonglong),
            ("ullAvailVirtual", ctypes.c_ulonglong),
            ("sullAvailExtendedVirtual", ctypes.c_ulonglong),
        ]
    
    stat = MEMORYSTATUSEX()
    stat.dwLength = ctypes.sizeof(MEMORYSTATUSEX)
    ctypes.windll.kernel32.GlobalMemoryStatusEx(ctypes.byref(stat))
    
    total_gb = round(stat.ullTotalPhys / (1024 ** 3), 2)
    available_gb = round(stat.ullAvailPhys / (1024 ** 3), 2)
    used_gb = round((stat.ullTotalPhys - stat.ullAvailPhys) / (1024 ** 3), 2)
    usage_percent = stat.dwMemoryLoad
    
    return {
        "total_memory_gb": total_gb,
        "available_memory_gb": available_gb,
        "used_memory_gb": used_gb,
        "usage_percent": usage_percent
    }

总结

如果没有特殊限制,强烈推荐用psutil——代码简洁、可靠,还能省掉很多跨平台兼容的麻烦。原生实现只适合不能安装第三方库的极端场景,维护成本会高不少。

内容的提问来源于stack exchange,提问作者Park Yo Jin

火山引擎 最新活动