2010-10-10 1 views
4

В настоящее время я пытаюсь отправить двоичные данные через pexpect. По какой-то причине данные проходят через только поиск, за исключением 0x04, который просто пропущен. Я отслеживал вызов pexpect, чтобы определить, что все, что происходит, является вызовом os.write() для дескриптора файла, открытого из команды pty.fork().Персонажи, которые не делают это от ведущего к подчиненному псевдотерминалу

Любые идеи?

(пример кода, который иллюстрирует эту проблему)

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 
+0

Кроме того, драйвер pty выполняет локальное эхо для вас, как это видно, видя «хм» перед всем остальным. – Omnifarious

ответ

2

0x04 является^D, который является нажатие истекшим файла. Установлен ли pty в сыром режиме? Может, водитель ел.

Если вы сделаете это:

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

вы можете увидеть, что на самом деле водитель делает перевод. \x16 - это то же самое, что и^V, вот как вы цитируете вещи. Разумеется, перевод будет происходить только от мастера (притворяющегося физического терминала) и подчиненного. Притворный физический терминал находится там, где (на обычном терминальном устройстве) человек будет печатать

Я не уверен, как заставить водителя прекратить это делать. Если ребенок устанавливает свой терминал в режим raw, то это, скорее всего, сделает это.

+0

Кроме того, я знаю, что вы можете отправить этого персонажа поверх stdin, потому что если вы передадите его через вызов «exec -e», он будет в порядке. – Rannick

+0

@ Rannick - Сделал комментарий, затем понял, что это будет лучше, как отредактировать ответ. – Omnifarious

+0

подсказка работает для моей конкретной ситуации, я думаю, что im jsut собирается написать двоичный драйвер, который цитирует все эти данные, чтобы я мог сойти с рук. Если вы не чувствуете, что на вопрос полностью ответили, я оставлю это открытым, иначе, по крайней мере, для моих целей, у меня есть путь к функциональности, которая мне нужна от pexpect. – Rannick

Смежные вопросы