不是从主设备到从设备伪终端的字符

时间:2010-10-10 18:42:19

标签: python unix pty

我目前正在尝试通过pexpect发送二进制数据。出于某种原因,除了0x04之外,数据只能通过查找,只是跳过了。我追踪了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

1 个答案:

答案 0 :(得分:2)

0x04是^ D,这是文件结束按键。 pty是否已设置为原始模式?也许司机正在吃它。

如果你做到了:

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

你可以看到司机正在进行翻译。 \x16与^ V相同,这就是引用内容的方式。有意义的是,翻译只会从主设备(假装物理终端)和从设备发生。伪装物理终端是该人打字的地方(在普通终端设备上)

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