Получение статуса системы в Python

Есть ли способ получить статус системы в python, например объем свободной памяти, запущенные процессы, загрузку процессора и так далее. Я знаю, что в Linux я могу получить это из каталога / proc, но я хотел бы сделать это и в unix, и в Windows.


person Botto    schedule 18.08.2009    source источник
comment
Повторение этих вопросов: stackoverflow.com/questions/276052/ stackoverflow.com/questions/466684/   -  person John Fouhy    schedule 19.08.2009


Ответы (2)


Я не знаю ни одной такой библиотеки / пакета, которые в настоящее время поддерживают как Linux, так и Windows. Есть libstatgrab, который, похоже, не очень активно развивается (он уже поддерживает приличное разнообразие платформ Unix) и очень активный PSI (информация о системе Python), который работает на AIX, Linux, SunOS и Дарвин. Оба проекта нацелены на поддержку Windows в будущем. Удачи.

person Gerald Senarclens de Grancy    schedule 18.08.2009

Я не думаю, что для этого есть кроссплатформенная библиотека (хотя она определенно должна быть)

Однако я могу предоставить вам один фрагмент, который я использовал для получения текущей загрузки процессора от /proc/stat под Linux:

Изменить: ужасный недокументированный код заменен на немного более питонический и документированный код.

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)
person Otto Allmendinger    schedule 18.08.2009