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:
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:
Citation:
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