2016-09-09 7 views
0

Используя pexpect, я подключаюсь к консолью Linux, которая является машиной с ограниченными возможностями. Когда я икра соединения и попробуйте выполнить команду с помощью отправки или sendline я получаю ошибку говоря "ttyAMA0: 1 input overrun(s)"pexpect: Есть ли способ предотвратить переполнение ввода при использовании pexpect?

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

Для аналогичной проблемы tcl-expect имеет команду send_slow, которая замедляет скорость ввода до заданного значения. Был бы рад иметь любой эквивалент send_slow в python-expect.

Также попытался установить размер окна окна в ожидании, и все еще нет изменений в ошибке. Ошибка, которую я получаю, является прерывистой.

ответ

0

Отказ от ответственности. Это обходное решение, чем фактическое решение проблемы переполнения буфера. сделал следующие шаги:

  1. Перед вызовом питон скрипт, имеющий pexpect, установить скорость передачи данных в соответствии с консоли/Telnet соединение с помощью Запущенная. Например. stty speed 50
  2. Spawn новая оболочка в pexpect и установить delaybeforesend и delayaftersend до требуемого значения (требуется только, когда ваш перешеек является слишком медленным)
  3. Заменить sendline с нашим собственным настраиваемым sendline_slow, который будет отправлять 1 посимвольно.

Защиту sendline_slow (spawn_id, ЦМД):

for char in str(cmd): 
     spawn_id.send(char) 
    spawn_id.send('\n') 

Бинго. Теперь я могу отправлять команды в супер медленном режиме, чтобы консоль ...!

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

  • Нет связанных вопросов^_^