pty模块-master的'os.read'正在读取刚刚写入master的内容

时间:2019-03-15 18:15:46

标签: python python-3.x pty

更新:此问题已解决。 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是一对设备

0 个答案:

没有答案