更新:此问题已解决。 pty以规范模式初始化伪设备,必须禁用回显。参见this reply。
以下单元测试通过:
def test_pty(self):
mfd, sfd = pty.openpty()
pty.tty.B38400
devName = os.ttyname(sfd)
ser = serial.Serial(devName, baudrate=38400, timeout=1)
test_str = b'testing'
os.write(mfd, test_str)
time.sleep(1)
self.assertEqual(ser.readline(), test_str)
显示已写入从属伪设备的字节是在从属伪设备上读取的。
但是,如果我切换两个语句的顺序:
def test_pty(self):
mfd, sfd = pty.openpty()
pty.tty.B38400
devName = os.ttyname(sfd)
test_str = b'testing'
os.write(mfd, test_str) # Write first
ser = serial.Serial(devName, baudrate=38400, timeout=1) # Then set up serial
time.sleep(1)
self.assertEqual(ser.readline(), test_str)
然后失败。 ser.readline()
读取零字节。
我注意到以下内容也通过了:
def test_pty(self):
mfd, sfd = pty.openpty()
pty.tty.B38400
devName = os.ttyname(sfd)
test_str = b'testing'
os.write(mfd, test_str) # Write to master
self.assertTrue(test_str, os.read(mfd, len(test_str)) # Read from master
从本质上讲,如果我os.write
与主机设备 之前建立了与从机设备的串行连接,则字节将在主伪设备上回显/写入(?)。终端而不是奴隶的。
请帮助我理解为什么。
(Python 3.4.8)
编辑:
将pty
替换为pseudo-device
,因为pty
是一对设备