2017-07-15 3 views
0

Je suis en train d'obtenir python à l'échec si un port COM n'est pas connecté:Python: délai d'attente pyserial ne semble pas fonctionner à la connexion

import serial 

ser = serial 

print("ermrmrmrr") 
try: 
    ser = serial.Serial(
     port  = 'COM6', 
     baudrate = 115200, 
     parity  = serial.PARITY_NONE, 
     stopbits = serial.STOPBITS_ONE, 
     bytesize = serial.EIGHTBITS, 
     timeout  = 1, 
     ) 
except: 
    print("what what in the butt") 
    ser.close() 
    sys.exit(0) 

print("grrrrr") 

la sortie est:

ermrmrmrr 
what what in the butt 
Traceback (most recent call last): 
    File "C:\Projects\Personal\Alex_Quadcopter\mine\scripts\lib\GetData.py", line 21, in <module> 
    write_timeout = 1, 
    File "C:\Users\dingleberry\AppData\Local\Programs\Python\Python36-32\lib\site-packages\serial\serialwin32.py", line 31, in __init__ 
    super(Serial, self).__init__(*args, **kwargs) 
    File "C:\Users\dingleberry\AppData\Local\Programs\Python\Python36-32\lib\site-packages\serial\serialutil.py", line 240, in __init__ 
    self.open() 
    File "C:\Users\dingleberry\AppData\Local\Programs\Python\Python36-32\lib\site-packages\serial\serialwin32.py", line 78, in open 
    self._reconfigure_port() 
    File "C:\Users\dingleberry\AppData\Local\Programs\Python\Python36-32\lib\site-packages\serial\serialwin32.py", line 222, in _reconfigure_port 
    'Original message: {!r}'.format(ctypes.WinError())) 
serial.serialutil.SerialException: Cannot configure port, something went wrong. Original message: OSError(22, 'The semaphore timeout period has expired.', None, 121) 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File ".\PrincipalAxes.py", line 11, in <module> 
    from lib import GetData as gd 
    File "C:\Projects\Personal\Alex_Quadcopter\mine\scripts\lib\GetData.py", line 25, in <module> 
    print("what what in the butt") 

Cette la sortie est en quelque sorte ok, sauf qu'il est de 30 secondes - 1 minute après la tentative de connexion, au lieu de temporiser 1 seconde après.

Il semble que l'expiration du délai d'expiration du sémaphore ait expiré. au lieu de la tentative de connexion réelle.

Répondre

1

Le problème est que vous ne pouvez pas fermer ser car quelque chose de fatal s'est produit.

Vous devez diviser votre attrape en exceptions individuelles, au lieu de celles qui capturent tout. Par exemple:

except serial.SerialException as e: 
    #There is no new data from serial port 
    print str(e) 
    sys.exit(1) 
except TypeError as e: 
    print str(e) 
    ser.port.close() 
    sys.exit(1) 

Notez également que le passage généralement 0-sys.exit signifie succès. Vous devriez passer 1 ou un autre nombre différent de zéro pour indiquer l'échec.

+0

Cela semble fonctionner !!!!!! Woooooot! Vous êtes l'homme ou la femme! Quoi que tu sois, tu es génial !!! Je vous remercie! :) – user2654735