2009-07-30 23 views
9

Da un'applicazione Python, come posso ottenere la quantità totale di RAM del sistema e quanta parte è attualmente libera, in modo multipiattaforma?Ottenere la RAM totale/libera da Python

Idealmente, la quantità di RAM libera dovrebbe considerare solo la memoria fisica che può essere effettivamente allocata al processo Python.

+0

possibili duplicati: http://stackoverflow.com/questions/466684/how-can-i-return-system-information-in-python/ e http : //stackoverflow.com/questions/276052/how-to-get-current-cpu-and-ram-usage-in-python –

+1

La RAM totale e attualmente gratuita non sono concetti multipiattaforma. Windows e GNU/Linux sono diversi sistemi operativi. Quale volete? L'altro sarà diverso. –

+0

psutil fa un ottimo lavoro su questo. – meawoppl

risposta

12

Hai provato SIGAR - System Information Gatherer And Reporter? dopo l'installazione

import os, sigar 

sg = sigar.open() 
mem = sg.mem() 
sg.close() 
print mem.total()/1024, mem.free()/1024 

Spero che questo aiuti

+1

Anche se questa risposta accettata è probabilmente perfettamente valida, una soluzione migliore nel 2015 è ora psutil (come raccomandato da Gringo Suave), che non fa parte della libreria standard, ma almeno è disponibile in modo totalmente indolore tramite pip. –

3

Non è possibile farlo con la libreria Python standard, anche se potrebbe esserci qualche pacchetto di terze parti che lo fa. Escluso questo, è possibile utilizzare il pacchetto os per determinare il sistema operativo in uso e utilizzare tali informazioni per acquisire le informazioni desiderate per quel sistema (e racchiuderlo in un'unica funzione multipiattaforma).

+0

Questo è quello che ho capito ... ma come potrei realizzarlo su ciascuno dei principali SO? – Algorias

+1

Bene, come sunqiang pubblicato, si potrebbe provare SIGAR (non so quale altra dipendenza potrebbe avere, se presente). Su linux, puoi ottenere informazioni sulla memoria da/proc/meminfo, e su altri unici puoi ottenerlo eseguendo vmstat. Su Windows probabilmente dovrai chiamare qualche API win32 (che puoi fare con i ctypes, o con il pacchetto win32 di Python). –

6

Per la parte di memoria libera, c'è una funzione nella libreria WX:

wx.GetFreeMemory() 

Purtroppo, questo funziona solo su Windows. Le porte Linux e Mac restituiscono "-1" o aumentano lo NotImplementedError.

+0

Ho ottenuto 'NotImplementedError' usando' wx.GetFreeMemory() ' – alvas

6

psutil sarebbe un'altra buona scelta. Ha anche bisogno di una libreria installata.

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

In Windows utilizzo questo metodo. È un po 'hacky ma funziona usando la libreria OS Standard:

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)