2010-01-07 10 views

Respuesta

11

Querrá utilizar el módulo wmi. Algo como esto:

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

Lo siento, esto obtiene la memoria física total (obviamente) - Lo dejaré abierto ya que es un paso en la dirección correcta hasta que encuentre el comando WMI para obtener la memoria usada/libre. –

+1

+1. Será trivial cambiar esto para recuperar los datos correctos. – Skurmedel

+0

@NigelHeffernan La respuesta existente ya usa Win32_OperatingSystem para acceder a FreePhysicalMemory. –

18

También se puede simplemente llamar GlobalMemoryStatusEx() (o cualquier exportación otra kernel32 o user32) directamente desde Python:

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)) 
No

necesariamente tan útil como WMI en este caso, pero sin duda un buen truco para tener en tu bolsillo trasero.

+0

Este fue increíble, no tenía idea de que pudieras hacer esto en Windows. – Anders

+0

¿Eso es un retorno en __init__? ¿Por qué harías eso? – Arafangion

+0

La supercomparación puede omitirse porque dwLength se ha inicializado antes y los otros _campos _ no necesitan inicializarse. – phobie

Cuestiones relacionadas