2013-09-17 3 views
1

Я пишу приложение, которое взаимодействует с многочисленными системами, в частности, с помощью переключателей,Запуск последовательных команд с модулем питона тканью

я пытаюсь реализовать функцию, которая позволит мне извлечь журналы из определенного переключателя, используя ткань (python)

В реальной сессии коммутатору мне нужно сначала запустить «включить» (и нажать клавишу ввода), а затем запустить команду «debug generate dump».

using fabric.operations.run() Я могу только выпустить одну команду за раз, с использованием fabric.operations.open_shell() не является опцией, так как мне нужно разобрать вывод, а также закрыть соединение после его завершения ,

Может кто-нибудь помочь в этом? СПАСИБО !!

Вот пример кода:

def getSwitchLog(self, host, port, username, password): 
     env.host_string = "%s:%s" % (host, port) 
     env.user = username 
     env.password = password 
     command = 'enable \r debug generate dump' 
     run(command, shell=cli, pty=True, combine_stderr=True, timeout=120) 
  • оболочки = кли - поскольку коммутатор не работает Баш и 'CLI' является соответствующее значение в этом случае

  • \ r должен был послать ключ «ввести», по существу, отправить 1. включить 2. ввести 3. отладить сгенерированную дампу

  • этот метод работает, если я переключаю запуск с помощью open_shell , но это, кажется, бегут игнорируемых \ г

мне удалось добиться того, что мне нужно с помощью:

command = 'sshpass -p admin ssh [email protected] cli \"enable\" \"show version\"' 
fabric.api.local(command, capture=True, shell=None) 

однако этот метод не надежен, как fabric.api.run(), а также требует узел работает, чтобы иметь sshpass установлен

Это пример выхода из CLI коммутатора в качестве команд, введенных в интерактивном режиме (клавиатуры) без ткани

[standalone: master] > enable 
[standalone: master] # debug generate dump 
[standalone: master] # debug generate dump Generated dump sysdump-SX6036-1-20130630-104051.tgz 
[standalone: master] # 

спасибо.

+0

Вы можете показать нам, что вы пытались? – Greg

+0

Привет, greg, спасибо за ваш комментарий, я обновил описание, и теперь он содержит пример кода. – eladHayun

+0

, так что вам нужно ввести что-то в bash на удаленном ящике после запуска какого-то cmd? – Greg

ответ

0

Таким образом, работа с состоянием сеанса не является чем-то, что делает Ткань. Каждый вызов - это новый сеанс. Есть еще один проект, который пытается обойти это, один из которых является fexpect, но поскольку вы пытаетесь запросить коммутатор, я не верю, что это сработает. Поскольку fexpect (последний знал) загружает сценарий ожидания, который затем запускается на удаленную машину.

Возможно, вам повезло с тем, что есть pxssh from the pexpect module. Это позволяет ssh + ожидать, что работа достаточно проста. Я думаю, что это вне ткани, но, скорее всего, вы будете работать на вас прямо из ворот.

+0

Спасибо за ответ, я пошел с чистым Paramiko в конце концов. – eladHayun

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