netmiko: невозможно выполнить команды из списка - PullRequest
1 голос
/ 15 апреля 2020

У меня нет проблем с выполнением команды Cisco через строку cmd = 'show version | include IOS'

from netmiko import ConnectHandler

cisco_device = {
    'device_type': 'cisco_ios',
    'ip': 'Router1',
    'username': 'u',
    'password': 'p'
}

# string OK
cmd = 'show version | include IOS'
print(type(cmd))

net_connect = ConnectHandler(**cisco_device)
output = net_connect.send_command(cmd)
print(output)

Вывод

user@linux:~$ python script-str.py 
<class 'str'>
Cisco IOS Software, 3700 Software (C3725-ADVENTERPRISEK9-M), Version 12.4(15)T7, RELEASE SOFTWARE (fc3)
user@linux:~$ 

Однако, когда я изменил его в список, он не работает.

from netmiko import ConnectHandler

cisco_device = {
    'device_type': 'cisco_ios',
    'ip': 'Router1',
    'username': 'u',
    'password': 'p'
}

# list problem
cmd = ['show version | include IOS']
print(type(cmd))

net_connect = ConnectHandler(**cisco_device)
output = net_connect.send_command(cmd)
print(output)

Вывод

user@linux:~$ python script-list.py
<class 'list'>
Traceback (most recent call last):
  File "script-list.py", line 14, in <module>
    output = net_connect.send_command(cmd)
  File "/home/user/.local/lib/python3.7/site-packages/netmiko/utilities.py", line 347, in wrapper_decorator
    return func(self, *args, **kwargs)
  File "/home/user/.local/lib/python3.7/site-packages/netmiko/base_connection.py", line 1378, in send_command
    command_string = self.normalize_cmd(command_string)
  File "/home/user/.local/lib/python3.7/site-packages/netmiko/base_connection.py", line 1532, in normalize_cmd
    command = command.rstrip()
AttributeError: 'list' object has no attribute 'rstrip'
user@linux:~$ 

Что не так с list во втором коде и как его исправить?

1 Ответ

1 голос
/ 15 апреля 2020

В вашем скрипте net_connect.send_command(cmd) принимает строку в качестве параметра, и вы передаете ей список.

Во втором примере попробуйте отправить строковое значение из списка cmd[0], который является строкой.

from netmiko import ConnectHandler

cisco_device = {
    'device_type': 'cisco_ios',
    'ip': 'Router1',
    'username': 'u',
    'password': 'p'
}

# list problem
cmd = ['show version | include IOS']
print(type(cmd))

net_connect = ConnectHandler(**cisco_device)
output = net_connect.send_command(cmd[0])
print(output)

см .: https://github.com/ktbyers/netmiko/issues/167

...