Obteniendo RAM total / libre desde Python
Pregunta
Desde dentro de una aplicación de Python, ¿cómo puedo obtener la cantidad total de RAM del sistema y qué cantidad de ella es actualmente gratuita, de forma multiplataforma?
Idealmente, la cantidad de RAM libre debería considerar solo la memoria física que se puede asignar al proceso de Python.
Solución
¿Ha intentado SIGAR - Recopilador y reportero de información del sistema ? Después de instalar
import os, sigar
sg = sigar.open()
mem = sg.mem()
sg.close()
print mem.total() / 1024, mem.free() / 1024
Espero que esto ayude
Otros consejos
psutil sería otra buena opción. Sin embargo, también necesita una biblioteca instalada.
>>> import psutil
>>> psutil.virtual_memory()
vmem(total=8374149120L, available=2081050624L, percent=75.1,
used=8074080256L, free=300068864L, active=3294920704,
inactive=1361616896, buffers=529895424L, cached=1251086336)
Para la parte de memoria libre, hay una función en la biblioteca wx:
wx.GetFreeMemory()
Lamentablemente, esto solo funciona en Windows. Los puertos de Linux y Mac devuelven " -1 " o levante un NotImplementedError
.
No puedes hacer esto solo con la biblioteca estándar de Python, aunque podría haber algún paquete de terceros que lo haga. De lo contrario, puede usar el paquete os para determinar en qué sistema operativo se encuentra y usar esa información para adquirir la información que desea para ese sistema (y encapsular eso en una única función multiplataforma).
En Windows utilizo este método. Es un poco pirateado pero funciona con una biblioteca estándar de sistemas operativos:
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)