为什么pySerial套接字协议不支持fileno()?

时间:2014-07-01 15:24:10

标签: python sockets pyserial uart pexpect

我的目标是能够在uart串行接口上​​使用python expect模块。

我试图将pySerial(serial)python模块连接到pexpect模块。但是,我使用套接字协议通过具有serial.serial_for_url()功能的套接字远程访问串行端口。

执行此操作时,它会失败,因为select()需要在Serial对象中定义fileno()。我收到以下错误: io.UnsupportedOperation: fileno

为什么套接字协议可以使用socket.fileno()? 我尝试过它似乎在linux下正常工作。

有什么理由说明serial.urlhandlers.protocol_socket.py默认不支持这种情况吗?

修改

我运行了以下内容:

>>> import serial
>>> import fdpexpect
>>> fd = serial.serial_for_url('socket://10.28.1.15:7002')
>>> px = fdpexpect.fdspawn(fd, logfile=open('test.log','w'))

请注意,您需要具有uart-to-network网桥的硬件。我在特定测试中使用Digi32CM,但它并不是真正相关。

当我运行fdspawn()函数时,出现以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "python2.7/site-packages/pexpect/fdpexpect.py", line 45, in __init__
    fd = fd.fileno()
io.UnsupportedOperation: fileno

pySerial Serial对象没有定义fileno()函数,即使它基于套接字并且可以使用套接字fileno。当我尝试添加它时,操作似乎工作正常:

def fileno(self):
    return self._socket.fileno()

我想知道我是否遗漏了什么?

1 个答案:

答案 0 :(得分:0)

有关信息,几年前已将fileno()添加到pyserial中,现在可以正常工作了。