Pyserial使用默认的系统串行配置

当使用python pyserial初始化串行连接而没有任何波特率时,它转到默认的9600波特配置

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

这个pyserial有任何选项可以通过已配置的设置(通过其他应用程序或stty linux命令配置)读取/写入串行端口吗?


我调查过pySerial的源代码。 看来这是不可能的。 PySerial有一组默认值。 如果我没有弄错,当你调用open()方法时,它总是将端口配置为这些默认值,或者将其改变为任何设置。

这是实现Serial::open()方法的相关位:

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

我看到了两种替代方案。 在调用Serial::open()之前从系统中获取您感兴趣的设置(使用stty也许Serial::open()并明确设置这些设置。

另一种选择是继承PySerial的Serial类,重新实现::open()方法,跳过配置部分:

    # self._reconfigure_port(force_update=True)

我不确定这是否会起作用。 它可能会导致问题,因为实现的其他部分期望端口处于特定配置中,但事实并非如此。

更新:我认为更好的实现open()方法将从打开的端口读取设置,并设置Serial对象的必要属性/属性以反映这些设置。

链接地址: http://www.djcxy.com/p/66821.html

上一篇: Pyserial using default system serial configuration

下一篇: How to set: Windows 7