IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Problème Thread & win32


Sujet :

Python

  1. #1
    Membre éclairé Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Par défaut Problème Thread & win32
    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:
    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)
    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
    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()

  2. #2
    Membre chevronné Avatar de cboudy
    Profil pro
    Ingénieur informatique industrielle
    Inscrit en
    Avril 2006
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique industrielle
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 407
    Par défaut
    comme le dit le shell python CoInitialize n'a pas été appellé
    il faut donc faire un
    puis dans le run :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pythoncom.CoInitialize()

  3. #3
    Membre éclairé Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Par défaut
    Maaaaah! Tout 'H'onnement!

    En fait c'est les \xe9 m'ont un peu perturbé... Un moyen de les chinter?

    Mercimerci et vive mario RPG par la même occasion!

  4. #4
    Membre chevronné Avatar de cboudy
    Profil pro
    Ingénieur informatique industrielle
    Inscrit en
    Avril 2006
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique industrielle
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 407
    Par défaut
    généralement ce genre problème vient d'un problème d'encodage,
    il doit falloir indiquer à python d'utiliser latin par défaut ou un quelque chose comme ça

Discussions similaires

  1. Problème thread et fonction récursive
    Par cryptorchild dans le forum Langage
    Réponses: 3
    Dernier message: 27/09/2006, 12h19
  2. Problème thread Boost
    Par TuRn3r dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 01/06/2006, 18h34
  3. Problème Thread et Scan de dossiers en C
    Par tptiben dans le forum Windows
    Réponses: 8
    Dernier message: 15/05/2006, 18h25
  4. Problème Thread
    Par Royd938 dans le forum Général Dotnet
    Réponses: 5
    Dernier message: 07/04/2006, 09h10
  5. [VC++ Express] Problème de compilation win32.
    Par fab29000 dans le forum MFC
    Réponses: 1
    Dernier message: 15/02/2006, 20h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo