/ / Pyserial en utilisant la configuration série du système par défaut - python, port série, pyserial

Pyserial utilisant la configuration série du système par défaut - python, port série, pyserial

Lors de l'initialisation d'une connexion série à l'aide de python python sans aucun débit en bauds, la configuration par défaut à 9600 bauds

ser = serial.Serial ("/ dev / ttyUSB0")

Est-ce que cette option pyserial a le choix de lire / écrire sur le port série avec les paramètres déjà configurés, configurés via une autre application ou stty commande linux?

Réponses:

1 pour la réponse № 1

J'ai "étudié le code source de pySerial". Il semble que ce n'est pas possible. PySerial a un ensemble de valeurs par défaut. Et si je ne me trompe pas, quand vous appelez open() méthode, il configurera toujours le port sur ces valeurs par défaut ou sur le paramètre que vous avez modifié.

C’est la partie pertinente de la mise en œuvre de Serial::open() méthode:

def open(self):
"""
Open port with current settings. This may throw a SerialException
if the port cannot be opened."""

# ... ...

# open
try:
self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
except OSError as msg:
self.fd = None
raise SerialException(msg.errno, "could not open port %s: %s" % (self._port, msg))
#~ fcntl.fcntl(self.fd, fcntl.F_SETFL, 0)  # set blocking

try:
# **this is where configuration occurs**
self._reconfigure_port(force_update=True)
except:
try:
os.close(self.fd)
except:
# ignore any exception when closing the port
# also to keep original exception that happened when setting up
pass
self.fd = None
raise
else:

https://github.com/pyserial/pyserial/blob/master/serial/serialposix.py#L299

Je vois deux alternatives pour vous; récupérez les paramètres qui vous intéressent depuis le système (en utilisant stty peut-être) avant d'appeler Serial::open() et définir ces paramètres explicitement.

Une autre option consiste à sous-classer PySerial "s Serial classe, re implémenter ::open() méthode, ignorez la partie configuration:

    # self._reconfigure_port(force_update=True)

Je ne sais pas si cela fonctionnerait bien. Cela pourrait poser des problèmes, car d’autres parties de l’implémentation s’attendent à ce que le port se trouve dans une configuration spécifique, mais ce n’est pas le cas.

UPDATE: Je pense qu'une meilleure mise en œuvre de open() Cette méthode lirait les paramètres du port ouvert et définirait les attributs / propriétés nécessaires du Serial objet pour refléter ces paramètres.