421 votes

Comment obtenir l'utilisation actuelle du CPU et de la RAM en Python ?

Quelle est votre méthode préférée pour obtenir l'état actuel du système (CPU actuel, RAM, espace disque libre, etc.) en Python ? Points bonus pour les plateformes *nix et Windows.

D'après mes recherches, il semble y avoir plusieurs façons d'extraire cette information :

  1. En utilisant une bibliothèque telle que PSI (qui semble actuellement ne pas être développé activement et ne pas être supporté sur plusieurs plateformes) ou quelque chose comme pystatgrab (là encore, aucune activité depuis 2007, semble-t-il, et aucun support pour Windows).

  2. L'utilisation d'un code spécifique à la plate-forme, comme l'utilisation d'un os.popen("ps") ou similaire pour les systèmes *nix et MEMORYSTATUS en ctypes.windll.kernel32 (voir cette recette sur ActiveState ) pour la plate-forme Windows. On pourrait créer une classe Python avec tous ces bouts de code.

Ce n'est pas que ces méthodes soient mauvaises, mais existe-t-il déjà un moyen multiplateforme et bien supporté de faire la même chose ?

0 votes

Vous pouvez créer votre propre bibliothèque multiplateforme en utilisant des importations dynamiques : "if sys.platform == 'win32' : import win_sysstatus as sysstatus ; else" ...

1 votes

Ce serait cool d'avoir quelque chose qui fonctionne sur App Engine aussi.

1 votes

L'âge des paquets est-il important ? Si quelqu'un a réussi du premier coup, pourquoi ne le ferait-il pas encore ?

4voto

Subhash Points 402

Ce script pour l'utilisation du CPU :

import os

def get_cpu_load():
    """ Returns a list CPU Loads"""
    result = []
    cmd = "WMIC CPU GET LoadPercentage "
    response = os.popen(cmd + ' 2>&1','r').read().strip().split("\r\n")
    for load in response[1:]:
       result.append(int(load))
    return result

if __name__ == '__main__':
    print get_cpu_load()

3voto

Saptarshi Ghosh Points 11
  • Pour les détails sur le CPU, utilisez psutil bibliothèque

    https://psutil.readthedocs.io/en/latest/#cpu

  • Pour la fréquence de la RAM (en MHz), utilisez la bibliothèque Linux intégrée. dmidecode et manipulez un peu la sortie ;). cette commande a besoin de la permission de Root donc fournissez votre mot de passe aussi. copiez simplement la commande suivante en remplaçant mypass avec votre mot de passe

import os

os.system("echo mypass | sudo -S dmidecode -t memory | grep 'Clock Speed' | cut -d ':' -f2")

------------------- Sortie ---------------------------
1600 MT/s
Inconnu
1600 MT/s
Inconnu 0

  • plus précisément
    [i for i in os.popen("echo mypass | sudo -S dmidecode -t memory | grep 'Clock Speed' | cut -d ':' -f2").read().split(' ') if i.isdigit()]

-------------------------- sortie -------------------------
['1600', '1600']

0 votes

Ajouter une description supplémentaire

3voto

sudhirkondle Points 69

Prise en compte du retour d'information de la première réponse et petits changements

#!/usr/bin/env python
#Execute commond on windows machine to install psutil>>>>python -m pip install psutil
import psutil

print ('                                                                   ')
print ('----------------------CPU Information summary----------------------')
print ('                                                                   ')

# gives a single float value
vcc=psutil.cpu_count()
print ('Total number of CPUs :',vcc)

vcpu=psutil.cpu_percent()
print ('Total CPUs utilized percentage :',vcpu,'%')

print ('                                                                   ')
print ('----------------------RAM Information summary----------------------')
print ('                                                                   ')
# you can convert that object to a dictionary 
#print(dict(psutil.virtual_memory()._asdict()))
# gives an object with many fields
vvm=psutil.virtual_memory()

x=dict(psutil.virtual_memory()._asdict())

def forloop():
    for i in x:
        print (i,"--",x[i]/1024/1024/1024)#Output will be printed in GBs

forloop()
print ('                                                                   ')
print ('----------------------RAM Utilization summary----------------------')
print ('                                                                   ')
# you can have the percentage of used RAM
print('Percentage of used RAM :',psutil.virtual_memory().percent,'%')
#79.2
# you can calculate percentage of available memory
print('Percentage of available RAM :',psutil.virtual_memory().available * 100 / psutil.virtual_memory().total,'%')
#20.8

3voto

Leroy Kayanda Points 23

Vous pouvez lire /proc/meminfo pour obtenir la mémoire utilisée

file1 = open('/proc/meminfo', 'r') 

for line in file1: 
    if 'MemTotal' in line: 
        x = line.split()
        memTotal = int(x[1])

    if 'Buffers' in line: 
        x = line.split()
        buffers = int(x[1])

    if 'Cached' in line and 'SwapCached' not in line: 
        x = line.split()
        cached = int(x[1])

    if 'MemFree' in line: 
        x = line.split()
        memFree = int(x[1])

file1.close()

percentage_used = int ( ( memTotal - (buffers + cached + memFree) ) / memTotal * 100 )
print(percentage_used)

0 votes

Ceci est évidemment spécifique à Linux.

1voto

LeoG Points 389

Vous pouvez utiliser psutil ou psmem avec le sous-processus exemple de code

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

Référence

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

0 votes

Ce n'est pas un bon exemple de l'utilisation de l'option subprocess bibliothèque. Comme le dit sa documentation, il faut éviter les Popen en faveur de l'une des fonctions de niveau supérieur subprocess.check_output o subprocess.run . Ce n'est pas clair ce que ./ps_mem est ici.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X