2009-08-18 8 views
10

Gibt es eine Möglichkeit, Systemstatus in Python, zum Beispiel die Menge an Speicher frei, Prozesse, die ausgeführt werden, CPU laden und so weiter. Ich weiß auf Linux Ich kann dies aus dem Verzeichnis/Proc, aber ich möchte dies auch auf Unix und Windows tun.Abrufen des Systemstatus in Python

+2

Duplikat dieser Fragen: 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 –

Antwort

8

ich weiß nicht, von einer solchen Bibliothek/Paket das unterstützt derzeit sowohl Linux als auch Windows. Es gibt libstatgrab, die nicht sehr aktiv entwickelt zu sein scheinen (es unterstützt bereits eine ordentliche Vielzahl von Unix-Plattformen) und das sehr aktive PSI (Python System Information), das unter AIX, Linux, SunOS und Darwin funktioniert. Beide Projekte zielen darauf ab, Windows-Unterstützung irgendwann in der Zukunft zu haben. Viel Glück.

7

Ich glaube nicht, gibt es eine Cross-Plattform-Bibliothek für die noch (es sollte auf jeden Fall ein, obwohl sein)

ich aber mit Ihnen einem Schnipsel liefern kann ich die aktuelle CPU-Last von /proc/stat zu erhalten verwendet, um unter Linux:

bearbeiten: ersetzt schrecklich undokumentierten Code mit etwas mehr pythonic und dokumentiert Code

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