4

我目前正在尝试通过 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
4

1 回答 1

2

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

如果你做到了:

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

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

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

于 2010-10-10T18:57:11.223 回答