2010-01-07 80 views

回答

11

你想使用wmi模块。例如:

import wmi 
comp = wmi.WMI() 

for i in comp.Win32_ComputerSystem(): 
    print i.TotalPhysicalMemory, "bytes of physical memory" 

for os in comp.Win32_OperatingSystem(): 
    print os.FreePhysicalMemory, "bytes of available memory" 
+0

对不起,这得到总物理内存(显然) - 我会留下开放,因为它是朝着正确方向迈出的一步,直到我找到WMI命令来获得使用/空闲内存。 – 2010-01-07 01:29:37

+1

+1。将它改为获取正确的数据将是微不足道的。 – Skurmedel 2010-01-07 01:30:36

+0

@NigelHeffernan现有的答案已经使用Win32_OperatingSystem访问FreePhysicalMemory。 – 2018-02-05 20:25:39

18

你也可以调用GlobalMemoryStatusEx()(或任何其他KERNEL32或USER32出口)直接从蟒蛇:

import ctypes 

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), 
    ] 

    def __init__(self): 
     # have to initialize this to the size of MEMORYSTATUSEX 
     self.dwLength = ctypes.sizeof(self) 
     super(MEMORYSTATUSEX, self).__init__() 

stat = MEMORYSTATUSEX() 
ctypes.windll.kernel32.GlobalMemoryStatusEx(ctypes.byref(stat)) 

print("MemoryLoad: %d%%" % (stat.dwMemoryLoad)) 

不一定如WMI在这种情况下是有用的,但绝对是一个不错的把戏在你的后袋。

+0

这一个是真棒,不知道,你可以在Windows中做到这一点。 – Anders 2010-06-11 07:54:36

+0

这是__init__中的返回?为什么要这么做? – Arafangion 2011-12-15 03:00:53

+0

超级调用可以省略,因为dwLength之前已经初始化,其他_fields_不需要初始化。 – phobie 2012-09-25 16:33:33

相关问题