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 :

creation de service windows probleme de mise en forme class et def


Sujet :

Python

  1. #1
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Points : 53
    Points
    53
    Par défaut creation de service windows probleme de mise en forme class et def
    bonjour debut en python, je voudrais creer un service qui enregistre dans un fichier les data recuperer par un lecteur RFID dans un fichier.

    j'ai creer le fichier en python, quand je le lance via python il fonctionne bien.

    j'ai recuperer les information pour creer un service sur ce model :https://www.gerbelotbarillon.com/python-win-service.php.

    j'ai donc essayer de fusionner mon programme avec les class necessaire pour faire tourné mon service

    voici mon fichier :
    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    import time
    import sys
    import win32serviceutil  # ServiceFramework and commandline helper
    import win32service  # Events
    import servicemanager  # Simple setup and logging
    import pywinusb.hid as hid
    import getpass
    import time
    import csv
     
    DEVICE_DEFAULT_VID = 0xffff
    DEVICE_DEFAULT_PID = 0x0035
     
    count = 0
    keys3 = []
    key_text = ""
     
     
     
    class MyService:
     
     
        """Silly little application stub"""
        def stop(self):
            """Stop the service"""
            self.running = False
     
        def run(self):
            """Main service loop. This is where work is done!"""
            self.running = True
            while self.running:
                main()            
     
     
    class MyServiceFramework(win32serviceutil.ServiceFramework):
     
        _svc_name_ = 'MyService'
        _svc_display_name_ = 'My Service display name'
     
        def SvcStop(self):
            """Stop the service"""
            self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
            self.service_impl.stop()
            self.ReportServiceStatus(win32service.SERVICE_STOPPED)
     
        def SvcDoRun(self):
            """Start the service; does not return until stopped"""
            self.ReportServiceStatus(win32service.SERVICE_START_PENDING)
            self.service_impl = MyService()
            self.ReportServiceStatus(win32service.SERVICE_RUNNING)
            # Run the service
            self.service_impl.run()
     
     
    def init():
        if len(sys.argv) == 1:
            servicemanager.Initialize()
            servicemanager.PrepareToHostSingle(MyServiceFramework)
            servicemanager.StartServiceCtrlDispatcher()
        else:
            win32serviceutil.HandleCommandLine(MyServiceFramework)
     
    def scan_hiddevice():
        """ Scans for and returns the HID device. """
        devices = hid.HidDeviceFilter( vendor_id = DEVICE_DEFAULT_VID, product_id = DEVICE_DEFAULT_PID ).get_devices()
        if not devices:
            print ("scan_hiddevice: No device connected.")
            return None
        else:
            device = devices[0]
            print("scan_hiddevice: found %s", device )
            return device    
        return None
     
    def setup_hiddevice():
        """Creates a new HID device, opens it and attaches a receive data handler"""
        hid_device = scan_hiddevice()
        print("here")
        hid_device.open()
        return hid_device
     
    def replace_characters(data):
        data = data.replace( "&","1")
        data = data.replace( "é","2")
        data = data.replace( '"',"3")
        data = data.replace( "'","4")
        data = data.replace( "(","5")
        data = data.replace( "-","6")
        data = data.replace( "è","7")
        data = data.replace( "_","8")
        data = data.replace( "ç","9")
        data = data.replace( "à","0")
        return data
     
    def main(verbose=True):
        hid_device = setup_hiddevice()
        compteur=0
     
        while compteur < 50 :
        #try:
            print ("-")
            data = hid_device.read(0x81,9,timeout=10000)
            print (data)
            print ("+")
        print("Fin")
        while (True):
            keys = getpass.getpass("Swipe Card")
            key_text = replace_characters(keys)
            print ("data lu-->"+keys)
            print ("data modifié-->"+key_text)
            print()
            with open('C:\\python\badgage.csv', 'a') as f:
              writer = csv.writer(f)
              writer.writerow(key_text)
            time.sleep(1)
     
    if __name__ == '__main__':
        init()
    j'arrive a a creer mon service, a le demarré mais il plante:

    C:\python\service2>dist\service_test2.exe debug
    Debugging service MyService - press Ctrl+C to stop.
    scan_hiddevice: No device connected.
    here
    Traceback (most recent call last):
    File "service_test2.py", line 118, in <module>
    init()
    File "service_test2.py", line 61, in init
    win32serviceutil.HandleCommandLine(MyServiceFramework)
    File "win32serviceutil.py", line 812, in HandleCommandLine
    File "win32serviceutil.py", line 602, in DebugService
    File "win32serviceutil.py", line 1067, in SvcRun
    File "service_test2.py", line 52, in SvcDoRun
    self.service_impl.run()
    File "service_test2.py", line 32, in run
    main()
    ^^^^^^
    File "service_test2.py", line 96, in main
    hid_device = setup_hiddevice()
    ^^^^^^^^^^^^^^^^^
    File "service_test2.py", line 79, in setup_hiddevice
    hid_device.open()
    ^^^^^^^^^^^^^^^
    AttributeError: 'NoneType' object has no attribute 'open'
    [28368] Failed to execute script 'service_test2' due to unhandled exception!

    C:\python\service2>
    merci pour toute l'aide que vous pourriez m'apporter

    bonne journée
    Christophe

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par chris45 Voir le message
    merci pour toute l'aide que vous pourriez m'apporter
    A propos de quoi donc ?
    Tu appelles scan_hiddevice() qui peut dans certains cas retourner None. Il faut donc soit
    • que tu testes si elle a effectivement ou pas retourné None
    • que tu la changes pour qu'elle ne retourne plus None

    En l'état actuel, tant que tu appelleras une fonction qui peut retourner None, tu ne pourras pas en conscience demander ensuite un open() sur ce que la fonction a réellement retourné parce que None n'a pas de open().
    C'est toi qui commandes ton code, pas ton code qui te commande...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par chris45 Voir le message
    merci pour toute l'aide que vous pourriez m'apporter
    Relisez le début de la sortie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    C:\python\service2>dist\service_test2.exe debug
    Debugging service MyService - press Ctrl+C to stop.
    scan_hiddevice: No device connected.
    here
    ça correspond au code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def scan_hiddevice():
        """ Scans for and returns the HID device. """
        devices = hid.HidDeviceFilter( vendor_id = DEVICE_DEFAULT_VID, product_id = DEVICE_DEFAULT_PID ).get_devices()
        if not devices:
            print ("scan_hiddevice: No device connected.")
            return None
    d'où l'appel à hid.HidDeviceFilter(...) ne trouve rien de connecté avec les caractéristiques demandées.
    Reste a savoir ce qu'il faut passer comme paramètre mais c'est un périphérique attaché au port USB du système et on ne se déplace pas chez vous.

    Pour ce qui est du plantage qui arrive après, on s'en fout un peu de toute façon sans "device" on ne peut rien faire sinon planter plus ou moins bruyamment.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Points : 53
    Points
    53
    Par défaut
    ah oui biensur, le lecteur n'est pas connecté... autant pour moi

    sinon il faudrait que je modifie pour ne pas realiser la fonction open si pas de lecteur usb connecté pour eviter un arret du service.

    je test

    merci pour vos reponse

    Christophe

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par chris45 Voir le message
    sinon il faudrait que je modifie pour ne pas realiser la fonction open si pas de lecteur usb connecté pour eviter un arret du service.
    Il faudrait aussi revoir la logique de la fonction
    Elle contient un code de ce type:
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if truc:
    	print("erreur")
    	return None
    else:
    	print("ok")
    	return device
    return None

    M'est avis que quoi qu'il se passe, le dernier return ne sera jamais atteint et peut donc disparaitre.

    Voici une autre possibilité totalement équivalente mais qui ressemble plus à l'idée "essai avec sortie si échec sinon on continue"
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if truc:
    	print("erreur")
    	return None
    print("ok")
    return device

    Tu as aussi des variables count = 0, keys3 = [] et key_text = "" qui ne sont jamais utilisées.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Points : 53
    Points
    53
    Par défaut
    merci pour cette proposition de code. c'etait l'idée, je vais essayer et vous tiens au courant

    les declaration de variables que tu as indiqué , c'etait pour des anciens test que je n'utilise plus. en effet je peux les supprimer

    bonne journée
    Christophe

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par chris45 Voir le message
    sinon il faudrait que je modifie pour ne pas realiser la fonction open si pas de lecteur usb connecté pour eviter un arret du service.
    Un programme qui tourne 24h/24 doit s'adapter à un environnement changeant. Les exceptions (et la possibilité de mettre le programme dans un état connu pour continuer/recommencer) à gérer sont à définir et à traiter. Et comme on n'est jamais sur de ne pas avoir oublié quelque chose, une trace de ce qu'il se passe (fichier log) est nécessaire pour une analyse post-mortem.

    Tout ça pour dire que ce ne sont pas des programmes pour débutants mais tant que vous foutez le bazar sur vos machines pas de soucis (sinon pour vous).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Points : 53
    Points
    53
    Par défaut
    wiztricks, je prend note de ton commentaire d'expert , avant d'etre expert tu es passé par la case novice,debutant et tu as forgé ton experience par les etudes et l'experience.

    c'est vrai je suis debutant et bricole un peu ( on peut appelé ca comme ca ) mais je progresse, j'apprends, je test,j e m'ameliore et ca grace a la volonte d'apprendre et la pedagogie de certain.

    le mieux est d'expliquer mes lacunes que de me dire que je fait mal.

    bonne journée

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par chris45 Voir le message
    wiztricks, je prend note de ton commentaire d'expert , avant d'etre expert tu es passé par la case novice,debutant et tu as forgé ton experience par les etudes et l'experience.
    Tout à fait. Et le b.a.ba est de ne pas se lancer dans des entreprises insurmontables i.e. connaître ses limites et si on se fixe des objectifs ambitieux, imaginez comment se former pour y arriver sans casse.

    Citation Envoyé par chris45 Voir le message
    le mieux est d'expliquer mes lacunes que de me dire que je fait mal.
    Que voulez vous que je vous explique? Il faut plus d'expérience et de connaissances que vous n'en avez pour se lancer dans l'écriture de ce type d'application. Après vous faites ce que vous voulez et comme votre vie n'est pas en danger...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/10/2015, 11h12
  2. [CR 9] Mise en forme non affichée when null
    Par Yorglaa dans le forum Formules
    Réponses: 2
    Dernier message: 28/06/2004, 17h27
  3. mise en forme rapide d'applets
    Par appletj dans le forum Applets
    Réponses: 11
    Dernier message: 03/06/2004, 13h28
  4. Mise en forme HTML
    Par Regis.C dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 25/04/2004, 11h55
  5. Mise en forme fichier avant Import
    Par jeff37 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/04/2004, 15h16

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