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




