我正在尝试通过pexpect发送二进制数据。出于某种原因,除了刚刚跳过的0x04之外,数据将通过just 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

最佳答案

0x04是^d,这是文件按键的结尾。PTY是否已设置为原始模式?可能是司机吃的。
如果你成功了:

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

你可以看到司机确实在翻译。\x16与^v相同,后者是引用事物的方式。这是有意义的翻译将只发生在主(假装物理终端)和从虚拟物理终端是指(在正常终端设备上)用户将要键入的内容
我不知道怎么让司机停止这样做如果子项将其终端设置为原始模式,则很可能会这样做。

关于python - 从主终端到从终端的字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3901658/

10-16 20:33