Bonsoir à tous,

Je suis nouveau en Python et j'ai beau essayer de comprendre par moi même en lisant tous les tutos FR et ENG mais la je donne ma langue au chat..

J'ai déjà effectué une recherche concernant ce problème mais aucun n'est exactement le même que le mien..

J'essaie de faire un petit script qui effectue diverses tâches toutes les X minutes, comme un planificateur de tâche en somme.

Je me doute que tout mon code est à améliorer mais j'aimerai juste comprendre se qu'il se passe ici comme erreur.



Voici la partie du code qui pose problème, ici tout se déroule néanmoins bien car j'ai enlevé la partie qui pose problème:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import time, os, psutil, sys

class Schedule:  
        
    def __init__(self, time_duree):
            
        self.time_start = time.time()
        self.time_duree = time_duree
        self.time_end = 0
        self.time_compteur = 0

    def start(self,):      # (Ré)initialise le "Chronomètre" en fixant la valeur du temps absolu actuel dans self.time_start.

        self.time_start = time.time()
        self.time_compteur = 0
        self.time_end = 0
    
    def compare(self,):      # Permet de connaître le temps écoulé depuis l'initialisation de la tâche.
    
        self.time_end = time.time()      # Fixe la valeur du temps absolu actuel dans self.time_end.
        self.time_compteur = self.time_end - self.time_start      # Fixe la valeur de la différence entre time_start et time_end.

Schedule.start(Action_1)      # Initialise le début du "Chronomètre" en appelant .startde la classe Schedule.
Schedule.start(Action_2)
Schedule.start(Action_3)
Schedule.start(Action_4)
Action_1 = Schedule(1200)      # Initialise les objets de la classe Schedule.
Action_2 = Schedule(120)
Action_3 = Schedule(2400)
Action_4 = Schedule(3600)

        
def Action_1():          # C'est cette partie qui pose problème lorsque qu'elle est jointe à la routine qui contrôle si le processus est lancé. (voir code suivant)
        
  exists = False
  Schedule.compare(Action_1)
  if Action_1.time_compteur > Action_1.time_duree:       # Quand self.compteur est plus grand que la durée fixée au début, retourner True.
     return True

>>> test()
True

Maintenant le code avec le message d'erreur:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import time, os, psutil, sys

class Schedule:  
        
    def __init__(self, time_duree):
            
        self.time_start = time.time()
        self.time_duree = time_duree
        self.time_end = 0
        self.time_compteur = 0

    def start(self,):      # (Ré)initialise le "Chronomètre" en fixant la valeur du temps absolu actuel dans self.time_start.

        self.time_start = time.time()
        self.time_compteur = 0
        self.time_end = 0
    
    def compare(self,):      # Permet de connaître le temps écoulé depuis l'initialisation de la tâche.
    
        self.time_end = time.time()      # Fixe la valeur du temps absolu actuel dans self.time_end.
        self.time_compteur = self.time_end - self.time_start      # Fixe la valeur de la différence entre time_start et time_end.

Schedule.start(Action_1)      # Initialise le début du "Chronomètre" en appelant .startde la classe Schedule.
Schedule.start(Action_2)
Schedule.start(Action_3)
Schedule.start(Action_4)
Action_1 = Schedule(1200)      # Initialise les objets de la classe Schedule.
Action_2 = Schedule(120)
Action_3 = Schedule(2400)
Action_4 = Schedule(3600)

        
def Action_1():          # C'est cette partie qui pose problème lorsque qu'elle est jointe à la routine qui contrôle si le processus est lancé.
        
  exists = False
  Schedule.compare(Action_1)
  if Action_1.time_compteur > Action_1.time_duree:
     for p in psutil.process_iter():      # C'est cette partie qui est rajoutée et qui pose problème, pourtant cette routine seule fonctionne également.
      try:
         pi = p.as_dict(attrs=['pid', 'name'])
      except:
         pass
      else:
         if pi['name'] == 'Fichier.exe':
             exists = True
             break
 
    if not exists:
      os.startfile("C:/Fichier.exe")
      Schedule.start(Action_1)      # Réinitialisation du Chronomètre 
      return
  else:
   return
>>> test()
Traceback (most recent call last):
  File "<pyshell#92>", line 1, in <module>
    Action_1()
TypeError: 'Schedule' object is not callable

Voilà j'espère avoir été clair, et que quelqu'un va pouvoir m'éclairer !

Un grand merci d'avance,
Bonne soirée à tous

Gauthier