Как узнать текущее использование процессора и оперативной памяти в Python? - PullRequest
268 голосов
/ 09 ноября 2008

Какой предпочитаемый способ получения текущего состояния системы (текущий процессор, оперативная память, свободное место на диске и т. Д.) В Python? Бонусные баллы для * nix и Windows платформ.

Кажется, есть несколько возможных способов извлечь это из моего поиска:

  1. Использование библиотеки, такой как PSI (которая в настоящее время, кажется, не активно развивается и не поддерживается на нескольких платформах) или что-то вроде pystatgrab (опять-таки никакой активности с 2007 года и без поддержки Windows).

  2. Использование кода, специфичного для платформы, например использование os.popen("ps") или аналогичного для * nix систем и MEMORYSTATUS в ctypes.windll.kernel32 (см. этот рецепт на ActiveState ) для платформы Windows. Можно поместить класс Python вместе со всеми этими фрагментами кода.

Дело не в том, что эти методы плохие, но уже есть хорошо поддерживаемый, многоплатформенный способ сделать то же самое?

Ответы [ 13 ]

0 голосов
/ 22 октября 2018

Основываясь на коде использования процессора @Hrabal, я использую следующее:

from subprocess import Popen, PIPE

def get_cpu_usage():
    ''' Get CPU usage on Linux by reading /proc/stat '''

    sub = Popen(('grep', 'cpu', '/proc/stat'), stdout=PIPE, stderr=PIPE)
    top_vals = [int(val) for val in sub.communicate()[0].split('\n')[0].split[1:5]]

    return (top_vals[0] + top_vals[2]) * 100. /(top_vals[0] + top_vals[2] + top_vals[3])
0 голосов
/ 31 марта 2016

Вы можете использовать psutil или psmem с подпроцессом пример кода

import subprocess
cmd =   subprocess.Popen(['sudo','./ps_mem'],stdout=subprocess.PIPE,stderr=subprocess.PIPE) 
out,error = cmd.communicate() 
memory = out.splitlines()

Ссылка http://techarena51.com/index.php/how-to-install-python-3-and-flask-on-linux/

https://github.com/Leo-g/python-flask-cmd

0 голосов
/ 09 ноября 2008

Я не верю, что есть хорошо поддерживаемая многоплатформенная библиотека. Помните, что сам Python написан на C, поэтому любая библиотека просто примет умное решение о том, какой фрагмент кода для конкретной ОС запускать, как вы предложили выше.

...