python - 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)
编辑:替换pty
为pseudo-device
, 就像pty
一对设备一样
解决方案
推荐阅读
- sql - MariaDB:从命令行 cmd.exe 创建数据库并执行不带“<”字符的 sql 脚本
- sql - 如何在 Postgresql 中找到当前的 max_parallel_workers 值?
- c - 我们可以调用 va_start() 两次而不调用 va_end() 吗?
- javascript - 当我添加数据对象'job'时,错误:vue.js:634 [Vue warn]: Property or method "job" is not defined on the instance
- html - QDomDocument:如何从 br 元素中获取文本?
- java - 在 JAVA 中将表情符号写入 XML 文件
- rest - 路由的 REST API 最佳实践
- r - ggplot2 将数据框的每一列与其他每一列进行对比
- javascript - 可以在 webcomponent 内部使用 vuejs 吗?
- javascript - 渲染将在 React 组件中实际运行多少次