Lire le taux des cores du CPU (windows et linux) sous python

Lire le taux des cores du CPU (windows et linux) sous python - Python - Programmation

Marsh Posté le 27-01-2008 à 16:06:39    

Bonjours à tous,
Dans le cadre d'un projet de monitoring, je me retrouve à devoir écrire un programme sous python qui serait capable de lire les taux d'utilisation des 2 cores CPU, de la RAM, ainsi que la température du CPU.
Le but final est d'envoyer ces infos à une interface via le port LPT1.
 
Ma question est la suivante:
Comment puis-je acquérir les taux d'utilisations dont j'ai besoin (il sont disponiples puisque win et linux peuvent les afficher en temps réel),
et quelles commandes dois-je utiliser pour écrire sur LPT1???
 
PS: j'aimerai que mon projet soit multi-plateforme: Win et Linux.


---------------
LAURENT Amaury, Etudiant Ingénieur - Instrumentation Automatique Informatique
Reply

Marsh Posté le 27-01-2008 à 16:06:39   

Reply

Marsh Posté le 28-01-2008 à 08:22:57    

Pour win, je sais pas. Mais pour linux tu peux utiliser top ou regarder dans les fichiers de /proc.
Avec top et sensors (pour la température, il faut que lm-sensors soit installé) tu peux faire comme ça :  

Code :
  1. #!/usr/bin/env python
  2. # -*- coding:Utf-8 -*-
  3. import os
  4. import re
  5. buff = os.popen('top -b -d0.5 -n 2')
  6. infos = buff.read()
  7. buff.close()
  8. cpu = re.findall('([0-9]*.[0-9])%us', infos)[1]
  9. mem = re.findall('([0-9]*)k used', infos)[2]
  10. print 'Cpu : '+ cpu +'%'
  11. print 'Mem : '+ str(int(mem)/1024) + 'M used'
  12. buff=os.popen('sensors')
  13. infos=buff.read().replace('+', '').replace(' ', '')
  14. buff.close()
  15. cpu_temp = re.findall('CPUTemp:([0-9]*)', infos)[0]
  16. print 'Cpu Temp : '+ cpu_temp + 'C'


Message édité par _mumu_ le 28-01-2008 à 08:52:59

---------------
"Software is like sex. It's better when it's free..."   Linus Torvalds
Reply

Marsh Posté le 31-01-2008 à 15:49:18    

Ok. Merci pour le script; je l'essaye dès que possible.
En revanche, pour écrire sur LPT1, c'est quelle commande?
Et y a t-il moyen de détailler les taux d'util pour les 2 cores du proc?


Message édité par amaury10 le 31-01-2008 à 18:08:44
Reply

Marsh Posté le 02-02-2008 à 19:45:40    

Le script fonctionne, j'ai les taux qui s'affichent mais après j'ai une liste d'erreurs...

Reply

Marsh Posté le 03-02-2008 à 22:30:27    

As tu lm-sensors d'installé ? Car une fois que les taux cpu et mem sont affichés, le script lance la commande sensors pour récupérer la température du cpu. Or pour que cette commande fonctionne, il faut que lm-sensors soit installé et correctement configuré.


---------------
"Software is like sex. It's better when it's free..."   Linus Torvalds
Reply

Marsh Posté le 05-02-2008 à 18:24:25    

Ah. Je crois pas qu'il soit installé.

Reply

Marsh Posté le 05-02-2008 à 18:40:44    

La console m'affiche ceci:
[amaury@localhost Bureau]$ python Affiche\ CPU.py
Cpu : 0.0%
Mem : 656M used
Traceback (most recent call last):
  File "Affiche CPU.py", line 15, in <module>
    cpu_temp = re.findall('CPUTemp: ([0-9]*)', infos)[0]
IndexError: list index out of range
C'est grave?

 

PS: sensor est installé


Message édité par amaury10 le 05-02-2008 à 18:41:15
Reply

Marsh Posté le 07-02-2008 à 20:44:20    

C'est que re.findall ne trouve pas la température. Si tu tapes sensors dans un terminal ça t'affiche quoi ?
Normalement tu dois avoir un truc dans ce style :
:~$ sensors
k8temp-pci-00c3
Adapter: PCI adapter
Core0 Temp:
             +34°C

 

w83627thf-isa-0290
Adapter: ISA adapter
VCore:     +1.47 V  (min =  +0.00 V, max =  +3.84 V)              
+12V:     +11.55 V  (min =  +4.92 V, max =  +0.97 V)       ALARM  
+3.3V:     +3.28 V  (min =  +1.14 V, max =  +1.95 V)       ALARM  
+5V:       +5.01 V  (min =  +5.65 V, max =  +1.71 V)       ALARM  
-12V:      +6.06 V  (min = -14.25 V, max = -14.91 V)       ALARM  
V5SB:      +5.03 V  (min =  +1.10 V, max =  +1.99 V)       ALARM  
VBat:      +0.03 V  (min =  +2.32 V, max =  +0.51 V)       ALARM  
fan1:     1896 RPM  (min = 12053 RPM, div = 4)              ALARM  
CPU Fan:  3308 RPM  (min =   -1 RPM, div = 2)              ALARM  
fan3:     2428 RPM  (min = 42187 RPM, div = 4)              ALARM  
M/B Temp:    +23°C  (high =   +19°C, hyst =    +0°C)   sensor = thermistor   ALARM  
CPU Temp:  +38.0°C  (high =   +80°C, hyst =   +75°C)   sensor = thermistor

 

Et le script me retourne ça :
~$ ./prog/python/infos_core.py
Cpu : 18.0%
Mem : 693M used
Cpu Temp : 38C


Message édité par _mumu_ le 07-02-2008 à 20:55:45

---------------
"Software is like sex. It's better when it's free..."   Linus Torvalds
Reply

Marsh Posté le 15-02-2008 à 19:03:31    

Le script fonctionne enfin.
Il n'y a toujours pas d'idées pour windows et pour LPT1?
 
Au final, mon prog devrait ressembler à cela:
http://nsm01.casimages.com/img/2008/05/23//0805230628102105093.jpg


Message édité par amaury10 le 23-05-2008 à 18:28:28
Reply

Marsh Posté le 15-02-2008 à 19:05:38    

Il ne reste que la partie acquisition, calculs et écriture à écrire :)

Reply

Marsh Posté le 15-02-2008 à 19:05:38   

Reply

Marsh Posté le 23-05-2008 à 18:24:56    

J'ai un nouveau problème,
Ma question peu paraitre bête mais je n'ai pas trouvé de réponse claire.
Voila: j'ai programmé une interface graphique avec wx.Python. Elle comporte plusieurs listes déroulantes (widget wx.Choice).
J'aimerai simplement récupérer la valeur que va choisir l'utilisateur dans la liste.
 
Voici un morceau de mon code:
 

Code :
  1. choix = [ '% CPU1' , '% CPU2', '% RAM' , "% GPU" , '%HDD' , "T cpu (°C)" , "T gpu (°C)" , "V ventilateur CPU (%)" , "V ventilateur GPU (%)" ]
  2.         port = [ 'LPT 1' , 'USB', 'RS232' ]
  3.         power = [ 'ON' , 'OFF' ]
  4.      
  5.         self.choix1 = wx.Choice(self,-1,choices=choix)
  6.         sizer.Add (self.choix1, (2,2), (1,1))
  7.                            
  8.         self.choix2 = wx.Choice(self,-1,choices=choix)
  9.         sizer.Add (self.choix2, (8,2), (1,1))
  10.              
  11.         self.choix3 = wx.Choice(self,-1,choices=choix)
  12.         sizer.Add (self.choix3, (2,6), (1,1))
  13.              
  14.         self.choix4 = wx.Choice(self,-1,choices=choix)
  15.         sizer.Add (self.choix4, (8,6), (1,1))
  16.         self.choix5 = wx.Choice(self,-1,choices=port)
  17.         sizer.Add (self.choix5, (13,2), (1,1))
  18.         self.choix6 = wx.Choice(self,-1,choices=power)
  19.         sizer.Add (self.choix6, (13,6), (1,1))

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed