Salut à toute la communauté des développeurs,![]()
Voilà je viens vous soumettre un code sur lequel je bloque depuis quelques jours. Celui génère une erreur dont je n'arrive pas à bout...
Il s'agit en fait d'appeler une fonction dans un Thread pour qu'elle puisse s'exécuter dans le même temps que le Thread principal continue. Le problème c'est que la fonction, ici CTRL_DD(), fait appel à la bibliothèque win32com dont les éléments semblent ne pas accepter d'être exécuté ailleurs que dans le Thread principal.
J'espère que vous aureez de l'inspiration, je suis vraiment à cours de ressources...
![]()
Merci.
L'erreur:
Le code:
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 Exception in thread Thread-1: Traceback (most recent call last): File "C:\Python24\lib\threading.py", line 442, in __bootstrap self.run() File "C:/Documents and Settings/adm/Bureau/Jérémy - Stage/Python/Projet_CTRL/test Dutonia 3.pyw", line 69, in run print self.nom() File "C:/Documents and Settings/adm/Bureau/Jérémy - Stage/Python/Projet_CTRL/test Dutonia 3.pyw", line 14, in CTRL_DD objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator") File "C:\Python24\Lib\site-packages\win32com\client\__init__.py", line 95, in Dispatch dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx) File "C:\Python24\Lib\site-packages\win32com\client\dynamic.py", line 98, in _GetGoodDispatchAndUserName return (_GetGoodDispatch(IDispatch, clsctx), userName) File "C:\Python24\Lib\site-packages\win32com\client\dynamic.py", line 78, in _GetGoodDispatch IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch) com_error: (-2147221008, "CoInitialize n'a pas \xe9t\xe9 appel\xe9.", None, None)
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86 #!/usr/bin/python # -*- coding: iso-8859-15 -*- import time, threading import wx import win32com.client def CTRL_DD(): "Controle de l'espace disque et annonce d'une surcharge ou non." print "CTRL_DD" help = "Controle l'espace restant d'un disque et annonce son etat de charge." strComputer = "." objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator") objSWbemServices = objWMIService.ConnectServer(strComputer,"root\cimv2") print "salut" colItems = objSWbemServices.ExecQuery("Select * from Win32_LogicalDisk") fp = file('ARG_CTRL_DD.txt') Pourcentage = fp.readline(1024) NomDisk = fp.readline(1024) for objItem in colItems: #On vérifie si le volume est un disque dur (Type3:DD) if objItem.DriveType == 3: NomDisk = str(NomDisk) + ":" Volume = objItem.Name Espace = float(objItem.Size) Libre = float(objItem.FreeSpace) Occupe = Espace - Libre Pourcentage = "0." + str(Pourcentage) Pourcentage = float(Pourcentage) Alerte = Espace - (Espace * Pourcentage) Go = 1000000000 i = 0 if NomDisk == Volume: i += 1 commentaire = "(" + str(Volume) + " " + str(int(Occupe/Go)) + "/" + str(int(Espace/Go)) + "Go)" SurfUtil = str(100 - int(Libre/Espace*100)) if Espace != None: if Libre <= Alerte: commentaire = "Disque en surcharge" + str(commentaire) retour = "CTRL_DD-False-" + commentaire + "-" + help return retour else: commentaire = "Il y a suffisament d'espace sur le disque" + str(commentaire) retour = "CTRL_DD-True-" + commentaire + "-" + help return retour elif i == 0: commentaire = "Le disque " + NomDisk + " n'existe pas" retour = "CTRL_DD-False-" + commentaire + "-" + help return retour def FonctSalut(): print "salut" class ThreadSonde(threading.Thread): def __init__(self, nom): threading.Thread.__init__(self) self.nom = nom def run(self): i=0 while i < 10: print self.nom() print i time.sleep(5) i+=1 #Ici, ça fonctionne, mais ce n'est pas dans le ThreadSonde #while i<10: sera remplacé plus tard par un evt while i=True: i=0 while i < 10: print self.nom() print i time.sleep(5) i+=1 T_S = ThreadSonde(CTRL_DD) T_S.start()
Partager