首页 > 解决方案 > pty 模块 - master 的“os.read”正在读取刚刚写入 master 的内容

问题描述

更新:这已解决。pty 在规范模式下初始化伪设备,必须禁用 echo。看到这个回复

以下单元测试通过:

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)

编辑:替换ptypseudo-device, 就像pty一对设备一样

标签: pythonpython-3.xpty

解决方案


推荐阅读