Python标准库获取总内存大小

3

我想知道Python标准库是否有模块可以获取总物理内存大小。我知道可以使用psutil,但如果我的Python脚本不需要安装外部模块就能运行,那将是非常好的。谢谢!

编辑: 抱歉,我忘了提到我正在使用macOS。感谢所有Windows解决方案!


1
在Linux上,您可以使用常规文件操作解析/proc/meminfo。 - Colonel Thirty Two
抱歉,我正在使用Mac :X。 - JACK ZHANG
重复的问题 https://dev59.com/JmEh5IYBdhLWcg3wtFb4 - maxschlepzig
3个回答

2

如果您使用的是Windows系统,可以使用GlobalMemoryStatusEx函数来获取内存信息,该方法只需要ctypes库,不需要其他附加模块。

from ctypes import Structure, c_int32, c_uint64, sizeof, byref, windll
class MemoryStatusEx(Structure):
    _fields_ = [
        ('length', c_int32),
        ('memoryLoad', c_int32),
        ('totalPhys', c_uint64),
        ('availPhys', c_uint64),
        ('totalPageFile', c_uint64),
        ('availPageFile', c_uint64),
        ('totalVirtual', c_uint64),
        ('availVirtual', c_uint64),
        ('availExtendedVirtual', c_uint64)]
    def __init__(self):
        self.length = sizeof(self)

使用方法如下:

>>> m = MemoryStatusEx()
>>> assert windll.kernel32.GlobalMemoryStatusEx(byref(m))
>>> print('You have %0.2f GiB of RAM installed' % (m.totalPhys / (1024.)**3))

请查看这里这里这里了解 MAC OS X/其他 UNIX 系统的相关信息。


谢谢你的回答,但是我正在使用Mac电脑... - JACK ZHANG
也许可以看一下这个 - Alyssa Haroldsen

1
我之前在Windows环境中使用过这个函数。
import os
process = os.popen('wmic memorychip get capacity')
result = process.read()
process.close()
totalMem = 0
for m in result.split("  \r\n")[1:-1]:
    totalMem += int(m)

print totalMem / (1024**3)

这里使用wmic和以下命令wmic memorychip get capacity,您可以从命令行运行该命令以查看以字节为单位的输出。
此命令读取计算机中每个内存模块的容量(以字节为单位),然后将总容量转换为千兆字节。

例子:

> wmic memorychip get capacity
Capacity
4294967296
4294967296

这表明我有两个4 GB的芯片。

> python get_totalmemory.py
8

将这两个模块的容量相加并进行快速转换,显示我在这台机器上有8 GB的RAM。


这似乎有点过度了,因为它是由内核 API 公开的东西... - Alyssa Haroldsen
这对我有效,尽管我不得不将split模式更改为" \n\n" - Panki

0

根据这个讨论,Python标准库似乎没有相关的功能。以下是一些可能有用的工具:

  • Python系统信息
  • Psutil(更新较快,跨平台支持良好,我以前用过,但不是在Blender中)
  • SIGAR(看起来比较新,支持多个平台)

是的,我在谷歌上搜索时看到了那个讨论。但由于它是5年前的内容,我并没有依赖它,所以我决定在这里再次发布。Psutil绝对可行,只是我不希望用户在使用我的脚本时必须安装外部库。 - JACK ZHANG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接