#python #python-3.x #python-2.7 #parsing
#python #python-3.x #python-2.7 #синтаксический анализ
Вопрос:
Я пытаюсь проанализировать таблицу с помощью переключателя. Если состояние «up», продолжайте выполнение 1000 итераций, иначе остановите тест. Ниже приведена таблица, которую мне нужно проанализировать, и это выходные данные «crt.Screen.Отправьте(«show» chr(13))» ниже в коде.
OS2(config-iap)# show
IAP Summary Table
IAP IAP TX/RX Channel(s) Channel WiFi Cell TX RX
Name State Type Chains Primary Bonds Setting Mode Antenna Size Power Threshold Stations
----- ----- ------------- ------------------------------- ------- ------- -------- ------- ------ --------- --------
iap1 up .11abgnac 3x3 6 auto bgn int-omni max 20dBm -90dBm 0
iap2 up .11anac 3x3 153 auto anac int-omni max 20dBm -90dBm 0
========
Totals: 0
OS2(config-iap)#
Ниже приведен весь код Python, который я использую для циклического переключения кода страны в течение 1000 итераций и проверки, находится ли состояние этих IAP1 / 2 в состоянии «вверх» или «вниз». Если «вверх», я бы хотел, чтобы программа продолжила выполнение своих итераций else (если «вниз»), чтобы остановить тест. Приведенный ниже код работает без инструкции for — Однако я должен визуально видеть, когда состояние переключается в нерабочее состояние, и останавливать тест вручную.
import time
output=""
def Main():
state="up"
crt.Screen.Send(chr(13))
crt.Screen.WaitForString("# ")
crt.Screen.Send("config" chr(13))
crt.Screen.WaitForString("# ")
crt.Screen.Send("interface iap" chr(13))
crt.Screen.WaitForString("# ")
virt = 0
while virt < 1000: #1024 being the max number of VLANs
virt = 1
crt.Screen.Send("!" str(virt) chr(13))
crt.Screen.WaitForString("# ")
crt.Screen.Send("country-code us" chr(13))
crt.Screen.WaitForString("(config-iap)# ")
time.sleep(3)
crt.Screen.Send("show date-time" chr(13))
crt.Screen.WaitForString("# ")
crt.Screen.Send("show" chr(13))
output = crt.Screen.recv(2000)
output=state.decode('utf-8')
ll=state.split(chr(13))
for item in ll:
if "iap" in ll:
mm=item.split()
if mm[1]==state:
continue
else:
break
#crt.Screen.WaitForString("# ")
crt.Screen.Send("country-code-reset" chr(13))
crt.Screen.WaitForString("(config-iap)# ")
crt.Screen.Send("show" chr(13))
crt.Screen.WaitForString("# ")
time.sleep(5)
crt.Screen.Send("exit" chr(13))
crt.Screen.WaitForString("# ")
#time.sleep(1)
Main()
Это ошибка, которую я получаю:
AttributeError Error: 'SecureCRT.Screen' object has no attribute 'recv' File: /Users/Documents/SecureCRT_Scripts/country-code_1.py Line: 24 state = crt.Screen.recv(2000)
Ответ №1:
Я думаю, что в вашем коде есть опечатка,
if "iap" in ll:
должно быть,
if "iap" in item:
Комментарии:
1. Потрясающий улов! Спасибо. Теперь я продолжаю работу с кодом, но получаю следующую ошибку: Ошибка AttributeError: у объекта ‘SecureCRT.Screen’ нет файла атрибута ‘recv’: /Users/Documents/SecureCRT_Scripts/country-code_1.py Строка: 24 состояние = crt.Screen.recv(2000)
2. не знаком с SecureCRT, но вы можете добавить некоторую отладочную информацию в свой скрипт. Возможно, это какая-то ошибка, которую вам нужно обработать перед вызовом recv.