2009-08-18 6 views
10

Y a-t-il un moyen d'obtenir l'état du système en python, par exemple la quantité de mémoire libre, les processus qui sont en cours d'exécution, le chargement CPU et ainsi de suite. Je sais sur linux que je peux l'obtenir à partir du répertoire/proc, mais je voudrais aussi le faire sous Unix et Windows.Obtention de l'état du système en python

+2

en double de ces questions: 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 –

Répondre

8

Je ne sais pas d'une telle bibliothèque/paquet qui supporte actuellement Linux et Windows. Il y a libstatgrab qui ne semble pas être très activement développé (il supporte déjà une variété décente de plates-formes Unix) et le très actif PSI (Python System Information) qui fonctionne sous AIX, Linux, SunOS et Darwin. Les deux projets visent à obtenir le support de Windows dans le futur. Bonne chance.

7

Je ne pense pas qu'il y ait une bibliothèque multi-plateforme pour cela encore (il devrait certainement être un bien)

Je peux cependant vous fournir un extrait je pour obtenir la charge du CPU de /proc/stat sous Linux:

Modifier: remplacé horribles Code sans papier avec un peu plus pythonique et le code documenté

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

Questions connexes