Синтаксический анализ таблицы

#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.