pySerial - 有没有办法一次选择多个端口?

Gab*_*iMe 5 python windows

我正在开发需要与许多串口通信的应用程序.我没有找到一种方法来做到这一点,而不使用每个端口的线程.有没有办法用单线程执行此操作?类似于多个端口上的select或poll一样?我正在使用pyserial 2.6

Nic*_*ood 6

我假设你在类似unix的平台上使用PySerial ......

由于PySerial对象实现了fileno()以获取底层文件描述符,因此您可以将它们直接传递给select,这将允许您一次处理多个PySerial对象.

另一种方法是设置nonblocking()并处理你的读写可能返回errno.EWOULDBLOCK错误的事实.这可能是最简单的方法.

第三种选择是使用扭曲的串口,如果你不想让你的头绕扭曲的方式做事.

更新

对于Windows,除了使用线程之外,几乎唯一的替代方法是使用inWaiting()方法.轮询所有串口,定期inWaiting()从中读取.如果有东西等待,那么你可以读取,只有那么多字节没有阻塞.

不幸的是,pyserial没有"输出缓冲区中有多少可用空间"方法,这意味着当您写入串行端口时,您将面临阻塞的风险.如果您正在实现典型的串行端口协议,则几千字节的默认缓冲区大小将确保这通常不是问题.