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 :

Douchette, Pyhook, Pythoncom et Thread


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 27
    Par défaut Douchette, Pyhook, Pythoncom et Thread
    Bonjour,

    J'essaye de lire un code barre avec une douchette en Python, à l'aide de Pyhook(lib trouvable là : http://sourceforge.net/apps/mediawik...itle=Main_Page) et Pythoncom j'ai trouvé ce qu'il me fallait. Si vous avez pas de douchette et que vous voulez aider, sachez qu'une douchette se comporte exactement comme un clavier

    Mon code barre est toujours fini par entrée dans mon cas, donc je stock les caractères tappés jusqu'à un hit de la touche entrée.

    Par contre cette lecture doit être faite lors de l'execution d'un autre programme, et pythoncom.PumpMessages() est bloquant. Du coup j'ai essayé de mettre le tout dans un thread que j'essaye de killer lorsque celui ci a lu mon code barre.

    En effet je veux reprendre l'execution de mon main une fois le code barre lu.

    Mais c'est pas bon, voir l'erreur si après. Je sais que killer les threads en Python c'est pas très clean mais je vois pas comment m'en sortir avec le fameux pythoncom.PumpMessages() que je n'arrive pas à contourner.


    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
    # -*- coding: cp1252 -*-
    import time
    import pythoncom, pyHook
    from threading import Thread
     
    class Mythread(Thread):
     
        def __init__ (self):
            Thread.__init__(self)
            # create a hook manager
            self.hm = pyHook.HookManager()
            self.codeBarre = ''
     
        def run(self):
            # set the hook
            self.hm.HookKeyboard()
     
            # watch for all keyboardsevents
            self.hm.KeyDown = self.OnKeyboardEvent
     
            # wait forever
            pythoncom.PumpMessages()
     
        def OnKeyboardEvent(self,event):
            if event.Ascii==13:
                print 'entree saisi au clavier OK'
                print self.codeBarre
                globals()["code"] = self.codeBarre
                sys.exit()
     
     
                return True
     
            if event.Ascii != None:
                if chr(event.Ascii) in ['0','1','2','3','4','5','6','7','8','9']:
                    print chr(event.Ascii)
                    self.codeBarre += chr(event.Ascii)
     
            else:
                print "other character"
                return False
     
     
    if __name__ == "__main__" :  
        globals()["code"] = ''
        p1 = Mythread()
        p1.start()
        time.sleep(10)
        print 'code from main '+globals()["code"]
    La sortie console

    22
    22
    22
    22
    55
    66
    66
    55

    entree saisi au clavier OK
    22225665
    Exception RuntimeError: RuntimeError('cannot join current thread',) in <module 'threading' from 'C:\Python26\lib\threading.pyc'> ignored
    Donc si vous avez des idées sur ce problème !

    D'avance merci

    Ciao

  2. #2
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Bonjour,
    je ne vais pas pouvoir répondre à ton post. Par contre, ton code m'intéresse pour la gestion de mes documents culturels (CD, DVD, livre).

    J'ai un petite question. Quelle douchette utilises-tu ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 328
    Par défaut
    Salut,

    J'avais compris que la douchette se comportait exactement comme un clavier. Du coup, pourquoi as-tu besoin de Pyhook ?

  4. #4
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Tout à fais.
    Un simple input suffit à lire un code avec un lecteur optique.
    Du coup quiz du thread, de time et de pythoncom.

    Et pourquoi ne pas lire le code en entier ?

    Par contre cette lecture doit être faite lors de l'execution d'un autre programme > Si une partie du programme nécessite une exécution en permanence c'est cette partie là qui doit être dans un thread. Pas une hypothétique saisie de code barre qui va capter toutes les saisies.
    Surtout vu ce qui est dit En effet je veux reprendre l'execution de mon main une fois le code barre lu..

    Bon, je ne comprend sans doute pas ce que vous voulez faire mais si un programme attend un code barre autant lui donner et ne pas se compliquer la vie, non ?

    Bon code

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 27
    Par défaut
    Bon ok vous n'avez pas toutes les infos.

    J'ai une interface en C# qui fait que de l'affichage, un moteur Python qui fait tous les traitements et une communication entre les deux que j'essaye de minimiser au maximun, ce qui veut dire que lorsque je demande en C# de saisir le code barre, c'est en Python que je veux le récupérer dans une variable (d'où le Pyhook). J'ai bien essayé le raw_input mais il est nécessaire que le curseur soit dans la console si je ne me trompe.

    Sinon en gros le programme a une éxecution comme suit :

    • initialisation
    • lit des infos
    • fait des claculs
    • demande lecture code barre
    • fait des vérifications avec le code barre et info
    • fini


    La lecture de code barre est donc juste un événement dans le déroulement du programme

    Merci pour ces premières réponses

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 27
    Par défaut
    Pour info la douchette bluetooth utilisée est une Metrologic Voyager bt MS9535

Discussions similaires

  1. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  2. récupérer la valeur de sortie d'un thread
    Par jakouz dans le forum Langage
    Réponses: 3
    Dernier message: 31/07/2002, 11h28
  3. Programmer des threads
    Par haypo dans le forum C
    Réponses: 6
    Dernier message: 02/07/2002, 13h53
  4. Réponses: 5
    Dernier message: 12/06/2002, 15h12
  5. [Kylix] Pb de Thread !!
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 25/04/2002, 13h53

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