Есть ли способ получить статус системы в python, например объем свободной памяти, запущенные процессы, загрузку процессора и так далее. Я знаю, что в Linux я могу получить это из каталога / proc, но я хотел бы сделать это и в unix, и в Windows.
Получение статуса системы в Python
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