CISCO IOS-XR, Python3.7, Не может выполнять такие команды, как » ls » и » df » на маршрутизаторе Cisco

#subprocess #cisco #cisco-ios #netmiko

Вопрос:

Маршрутизатор Cisco ios-xr с использованием интерфейса командной строки:

RP/0/RP0#показать версию

Чт 25 ноября 07:53:59.103 UTC

Программное обеспечение Cisco IOS XR, версия 6.5.32.11 I

Авторское право (c) 2013-2020 от Cisco Systems, Inc.

RP/0/RP0#запуск

Чт 25 ноября 07:54:05.231 UTC

[xr-vm_node0_RP0_CPU0:~]$df

Файловая система 1K-используемые блоки Доступны % использования, Смонтированные на

корни 3966080 1332040 2412860 36% /

76892 11848320 43% /mnt/ecu/vdd

[xr-vm_node0_RP0_CPU0:~]$

Использование python: Я могу запускать команды show с помощью Connecthandler .send.command:

 from netmiko import ConnectHandler import subprocess Network_Device = {"host": "10.111.22.333", "username": "USER123", "password": "Pass123", "device_type": "cisco_xr",}  Connect = ConnectHandler(**Network_Device) Connect.enable() version1 = "show version" print(Connect.send_command(version1))  

Но не в состоянии выполнить команды » df » или «ls», так как не могу связаться с подсказкой bash, которую я достигаю, выполнив команду «выполнить» на маршрутизаторе.

Я пытался:

 disk1files = subprocess.run("df", stdout=subprocess.PIPE) print(disk1files.stdout.decode())  

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

Это мой первый вопрос здесь, поэтому имейте в виду некоторые глупые вопросы или ошибки, сделанные в коде

Ответ №1:

если в DF вы имеете в виду «Не фрагментировать», то можно отправить его следующим образом

 Connect.send_command("ping 192.168.10.10 df-bit size 1600")  

где 1600 представляет MTU, а для команд ls-команда link,

 Connect.send_command("ls-active")  Connect.send_command("ls-active-enabled")   

но если вы имеете в виду df и ls в linux (файлы без диска и списка..), то вы можете использовать модуль ОС для отправки команд:

 import os os.system("ls -l")  

или используйте вызов из модуля подпроцесса:

 from subprocess import call call(["ls", "-l"])  

Если вам нужно загрузить cisco bash:

 switch# configure terminal switch(config)# feature bash-shell switch# run?  run Execute/run program  run-script Run shell scripts  switch# run bash?  bash Linux-bash  switch# run bash  bash-4.2$ whoami admin bash-4.2$ pwd /bootflash/home/admin bash-4.2$