【问题标题】:Characters not making it from a master to a slave pseudo-terminal字符没有从主伪终端变为从伪终端
【发布时间】:2010-10-10 18:42:18
【问题描述】:

我目前正在尝试通过 pexpect 发送二进制数据。出于某种原因,除了 0x04 之外,数据只是通过 find 得到的,它只是被跳过了。我跟踪了 pexpect 调用,以确定发生的所有事情都是对从 pty.fork() 命令打开的文件描述符的 os.write() 调用。

有什么想法吗?

(举例说明问题的示例代码)

import os, pty, sys


pid, child_fd = pty.fork()

if pid: # Parent
    os.write(child_fd, b"'\x04hmm\x04'\n")
    buf = os.read(child_fd, 100)
    print buf
else:   # Child
    text = sys.stdin.readline()
    print ''.join(["%02X " % ord(x) for x in text])

结果:

$ python test.py
'hmm'
27 68 6D 6D 27 0A

【问题讨论】:

  • 另外,pty 驱动程序正在为您执行本地回显,正如在所有其他操作之前看到 'hmm' 所证明的那样。

标签: python unix pty


【解决方案1】:

0x04 是 ^D,即文件结束按键。 pty 是否设置为原始模式?可能是司机在吃。

如果你成功了:

os.write(child_fd, b"'\x04hmm\x16\x04'\n")

您可以看到驱动程序确实在进行翻译。 \x16 与 ^V 相同,这是您引用事物的方式。翻译只会发生在主机(假装的物理终端)和从机上,这是有道理的。假装的物理终端是(在普通终端设备上)该人将要输入的位置

我不确定如何让司机停止这样做。如果孩子将其终端设置为原始模式,那么很可能会这样做。

【讨论】:

  • 另外,我知道你可以通过标准输入发送这个字符,因为如果你通过“exec -e”调用将它传入,它就可以正常输入。
  • @Rannick - 发表评论,然后意识到作为答案编辑会做得更好。
  • 该技巧适用于我的特殊情况,我认为我只是要编写一个引用所有这些数据的二进制驱动程序,这样我就可以摆脱它了。如果您认为问题没有得到完全回答,我将保持开放状态,否则,至少出于我的目的,我有一条通往 pexpect 所需功能的途径。
  • 我删除了我的第一条评论,因为你完全证明我错了。我确实不在基地。我看到 exec -e 调用没有创建伪终端。
猜你喜欢
  • 1970-01-01
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
  • 2012-01-30
  • 1970-01-01
  • 2011-10-30
  • 2020-04-18
相关资源
最近更新 更多