2009-08-18 18 views
10

¿Hay alguna forma de obtener el estado del sistema en python, por ejemplo, la cantidad de memoria libre, los procesos que se están ejecutando, la carga de la CPU, etc. Sé en linux que puedo obtener esto desde el directorio/proc, pero me gustaría hacer esto en Unix y Windows también.Obtención del estado del sistema en python

+2

duplicados de estas preguntas: http://stackoverflow.com/questions/276052/how-to-get-current-cpu-and-ram-usage- in-python http://stackoverflow.com/questions/466684/how-can-i-return-system-information-in-python/467291 –

Respuesta

8

no sé de cualquier biblioteca/paquete que actualmente es compatible con Linux y Windows. Hay libstatgrab que no parece estar muy desarrollado (aunque ya admite una variedad decente de plataformas Unix) y el muy activo PSI (Python System Information) que funciona en AIX, Linux, SunOS y Darwin. Ambos proyectos apuntan a tener soporte de Windows en algún momento en el futuro. Buena suerte.

7

No creo que hay una biblioteca multiplataforma para eso (hay sin duda debe ser uno, aunque)

que sin embargo se puede proporcionar con un fragmento que utiliza para obtener la carga actual de la CPU de bajo /proc/stat Linux:

Editar: reemplazado código indocumentado horrible, con un poco más de código Pythonic y documentado

import time 

INTERVAL = 0.1 

def getTimeList(): 
    """ 
    Fetches a list of time units the cpu has spent in various modes 
    Detailed explanation at http://www.linuxhowtos.org/System/procstat.htm 
    """ 
    cpuStats = file("/proc/stat", "r").readline() 
    columns = cpuStats.replace("cpu", "").split(" ") 
    return map(int, filter(None, columns)) 

def deltaTime(interval): 
    """ 
    Returns the difference of the cpu statistics returned by getTimeList 
    that occurred in the given time delta 
    """ 
    timeList1 = getTimeList() 
    time.sleep(interval) 
    timeList2 = getTimeList() 
    return [(t2-t1) for t1, t2 in zip(timeList1, timeList2)] 

def getCpuLoad(): 
    """ 
    Returns the cpu load as a value from the interval [0.0, 1.0] 
    """ 
    dt = list(deltaTime(INTERVAL)) 
    idle_time = float(dt[3]) 
    total_time = sum(dt) 
    load = 1-(idle_time/total_time) 
    return load 


while True: 
    print "CPU usage=%.2f%%" % (getCpuLoad()*100.0) 
    time.sleep(0.1) 
+5

[os.getloadavg()] (http://docs.python.org /library/os.html#os.getloadavg) –

Cuestiones relacionadas