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

标签 python serial-port 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)并显式设置这些设置。

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

    # self._reconfigure_port(force_update=True)

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

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

关于python - 使用默认系统串行配置的 Pyserial,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33781785/

相关文章:

angular - 串口包在 Angular 项目中出现错误

python - Pyserial 不能很好地与虚拟端口配合使用

字符串上的 Python/PySerial 位运算符

python - 列表列表中的 datetime 对象 - 如何获得每天的总数?

java - 使用 Java 中的串行通信从 Arduino 写入和读取数据

python - flask WTForms : Difference between DataRequired and InputRequired

serial-port - UART测试程序,读写: resource temporarily unavailable

python - undefined variable : SerialException

python - 如何创建具有 z 相关填充颜色的 matplotlib 线

python - 如何解析来自 Python 请求的 JSON 响应?