2010-01-07 56 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

相關問題