4

現在、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
4

1 に答える 1

2

0x04 は ^D で、ファイルの終わりのキー押下です。pty は raw モードに設定されていますか? 運転手が食べているのかもしれません。

あなたがそれを作るなら:

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

実際にドライバーが翻訳を行っていることがわかります。\x16は ^V と同じで、物事を引用する方法です。変換がマスター (ふりをした物理端末) とスレーブからのみ行われることは理にかなっています。仮の物理端末は、(通常の端末デバイスで) ユーザーが入力する場所です。

ドライバーにそれをやめさせる方法がわかりません。子が端末を生モードに設定すると、おそらくそれが行われます。

于 2010-10-10T18:57:11.223 に答える