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