Выполните несколько команд на коммутаторе Cisco через Paramiko - улучшите производительность - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь войти в коммутатор cisco и сделать там что-нибудь (например, настроить порт).Я не могу использовать exec_command(cmd1 \n cmd2 \n) на устройствах cisco, по-видимому ... Поэтому я использую канал для отправки своих команд следующим образом:

channel = ssh.invoke_shell()
channel.send("show arp\n")
while not channel.recv_ready():
    time.sleep(0.5)
out = channel.recv(9999)

Мне не нравится time.sleep(0.5) и я хочучто-то, чтобы динамически ожидать выполнения команды, потому что иногда команды занимают даже больше 0,5 сек, и это сильно замедляет работу.С exec_command(cmd) у меня было exit_status = channel.recv_exit_status() например.

Есть ли способ обойти это?

РЕДАКТИРОВАТЬ:

Могу ли я как-то прослушать канал и ждатьвывод будет выглядеть как

CISCOSWITCH#

, чтобы я знал, что готов отправить больше команд или exit?

1 Ответ

0 голосов
/ 25 апреля 2018

В общем, для этого вы должны использовать канал "exec". Канал "shell" не должен использоваться для автоматизации выполнения команды.

Но я понимаю, что ваш сервер не поддерживает несколько команд с каналом "exec". Я добавил вышеупомянутый комментарий для других читателей, чтобы не пытаться использовать это решение, если только им это не нужно.


Если вам нужно использовать канал "shell", вы должны использовать методы оболочки.

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

channel.send("show arp\necho Command-has-finished\n")

Затем вы продолжаете читать вывод, пока не найдете строку "Command-has-finished".

Проверьте код чтения из JSch Exec.java пример .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...