Автор Тема: Ruby, telnet-скрипт  (Прочитано 1085 раз)

Оффлайн hasculdr

  • Завсегдатай
  • *
  • Сообщений: 672
Ruby, telnet-скрипт
« : 01.06.2015 15:07:07 »
Здравствуйте. Возможно, здесь кто-нибудь маится похожими вещами и сможет подсказать что-нибудь путное. Пытаюсь научиться писать простенькие скрипты с telnet'ом на ruby. Если вывод команды занимает больше одного экрана - скрипт завершает свою работу (если делать подобную операцию вручную - для продолжения вывода нужно нажимать на клавиатуре "пробел").
Для начала собрался написать скрипт, который просто выдаст мне таблицу мак-адресов коммутатора:
require '/net/telnet'
$ip="10.0.0.1" # задаю адрес удаленного узла
host=Net::Telnet::new("Host" => $ip, "Timeout" => 3, "Waittime" => 1, "Prompt" => /<*>/) # задаю параметры по-умолчанию для этого узла. Здесь "Prompt" => /<*>/ - что-то типа приглашения командной строки, т.е. команды скрипт посылает только тогда, когда "видит" строку типа <Vty#0>
host.login(username="логин", password="пароль") {|c| print c} # авторизация, проходит нормально
host.puts("display mac-address") {|c| print c} # узлу отправляется первая команда
  host.waitfor(/  ---- More ----/) {|m| print m} # здесь ожидается предложение продолжить "многостраничный" вывод команды
  host.puts(" ") {|a| print a} # здесь я пытаюсь "нажать пробел", чтобы продолжить вывод
host.close # закрывается telnet-сессия
Сначала я пользовался методом .cmd(), но из-за постоянных ошибок в модуле самого Ruby  заменил его на связку .puts() (отправляет строку) и .waitfor() (ожидает определенный вывод чтобы понять, что предыдущая команда выполнена, и можно отправлять следующую).
В таком виде этот скрипт завершает свою работу без ошибок, но продолжение вывода команды не появляется. Выглядит так:
Спойлер
[hasculdr@hasculdr-alt ~]$ ruby /home/hasculdr/bin/test.rb

Warning: Telnet is not a secure protocol, and it is recommended to use Stelnet.

Login authentication


Username:
Password:
Info: The max number of VTY users is 5, and the number
      of current VTY users on line is 1.
<ARM-SemenVictor-blk>display mac-address
-------------------------------------------------------------------------------
MAC Address    VLAN/VSI                          Learned-From        Type     
-------------------------------------------------------------------------------
0001-6c01-4209 105/-                             GE0/0/2             dynamic   
0002-446a-85bb 105/-                             GE0/0/2             dynamic   
0002-4489-a498 105/-                             GE0/0/2             dynamic   
0004-75b3-c8de 105/-                             GE0/0/2             dynamic   
000c-6e53-81ac 105/-                             GE0/0/2             dynamic   
000c-6e86-7fd3 105/-                             GE0/0/2             dynamic   
000c-6e86-8354 105/-                             GE0/0/2             dynamic   
000c-6ec6-a4fb 105/-                             GE0/0/2             dynamic   
000e-a6bc-2fa3 105/-                             GE0/0/2             dynamic   
0011-5b28-7b9b 105/-                             GE0/0/2             dynamic   
0011-d833-f2f9 105/-                             GE0/0/2             dynamic   
0011-d8b4-84ee 105/-                             GE0/0/2             dynamic   
0011-d8b4-8ed8 105/-                             GE0/0/2             dynamic   
0011-d8b4-8edd 105/-                             GE0/0/2             dynamic   
0011-d8b4-a229 105/-                             GE0/0/2             dynamic   
0011-d8b4-a4fe 105/-                             GE0/0/2             dynamic   
0011-d8b4-a501 105/-                             GE0/0/2             dynamic   
0013-21c0-0392 105/-                             GE0/0/2             dynamic   
0013-d440-9f5d 105/-                             GE0/0/2             dynamic   
0013-d440-a08b 105/-                             GE0/0/2             dynamic   
0014-38d3-5b8c 105/-                             GE0/0/2             dynamic   
0015-f2b9-ce52 105/-                             GE0/0/2             dynamic   
0015-f2b9-ce92 105/-                             GE0/0/2             dynamic   
0015-f2b9-d0fd 105/-                             GE0/0/2             dynamic   
  ---- More ----[hasculdr@hasculdr-alt ~]$
Может быть, кто-нибудь знает как "вытягивать" оставшиеся страницы вывода в таких ситуациях?

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 251
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Re: Ruby, telnet-скрипт
« Ответ #1 : 01.06.2015 15:21:49 »
Не знаю как в Ruby, но в C буфер обмена stdout не выдаётся, пока полностью не наполнится, а для этого, при каждой выдаче строка должна заканчиваться символом \n ("ВК")