使用 TTP 解析数据并将解析后的输出放入 Python 个变量中

Parse data with TTP and put parsed output in Python variables

我正在使用 TTP 解析 SSH 输出。我已经得到它,所以我能够解析我想要的数据,但无法弄清楚如何将它放入变量中。到目前为止,我有一个非常基本的测试,并查看了 TTP 文档中的不同输出格式化程序和返回器,但无法弄清它的正反面。

我当前的脚本是:

from ttp import ttp
import pprint

data = """
test_olt_01(config)#display ont info summary 0/2
{ <cr>||<K> }:

  Command:
          display ont info summary 0/2
  Command is being executed. Please wait
  ------------------------------------------------------------------------------
  In port 0/2/0, the total of ONTs are: 4, online: 4
  ------------------------------------------------------------------------------
  ONT  Run     Last                Last                Last
  ID   State   UpTime              DownTime            DownCause
  ------------------------------------------------------------------------------
  0    online  10.03.2022 19:09:21 10.03.2022 19:07:12 dying-gasp
  1    online  09.04.2022 19:58:50 09.04.2022 19:57:48 dying-gasp
  2    online  13.04.2022 08:50:30 13.04.2022 08:47:57 dying-gasp
  3    online  30.03.2022 16:09:15 -                   -
  ------------------------------------------------------------------------------
  ONT        SN        Type          Distance Rx/Tx power  Description
  ID                                    (m)      (dBm)
  ------------------------------------------------------------------------------
  0   TEST123456789ABC 310M             4087  -13.49/2.10  10 Downing Street
  1   TEST123456789DEF 310M             4106  -13.51/1.94  11 Downing Street
  2   TEST123456789GHI 310M             4082  -11.67/2.13  12 Downing Street
  3   TEST123456789JKL 310M             4163  -13.29/2.14  13 Downing Street
  ------------------------------------------------------------------------------
"""

template = """
<template>
<group name="TOP_SECTION">
  {{ ont_id | isdigit}} {{ state }} {{ last_uptime | PHRASE }} {{ last_downtime | PHRASE }} {{ downcause }}
</group>
</template>

<template>
<group name="BOTTOM_SECTION">
  {{ ont_id | isdigit}} {{ sn }} 310M {{ dist }} {{ light }} {{ desc | PHRASE }}
</group>
</template>
"""

parser = ttp(data, template)
parser.parse()
pprint.pprint(parser.result())

输出为:

[[{'TOP_SECTION': [{'downcause': 'dying-gasp',
                    'last_downtime': '10.03.2022 19:07:12',
                    'last_uptime': '10.03.2022 19:09:21',
                    'ont_id': '0',
                    'state': 'online'},
                   {'downcause': 'dying-gasp',
                    'last_downtime': '09.04.2022 19:57:48',
                    'last_uptime': '09.04.2022 19:58:50',
                    'ont_id': '1',
                    'state': 'online'},
                   {'downcause': 'dying-gasp',
                    'last_downtime': '13.04.2022 08:47:57',
                    'last_uptime': '13.04.2022 08:50:30',
                    'ont_id': '2',
                    'state': 'online'}]}],
 [{'BOTTOM_SECTION': [{'desc': '10 Downing Street',
                       'dist': '4087',
                       'light': '-13.49/2.10',
                       'ont_id': '0',
                       'sn': 'TEST123456789ABC'},
                      {'desc': '11 Downing Street',
                       'dist': '4106',
                       'light': '-13.51/1.94',
                       'ont_id': '1',
                       'sn': 'TEST123456789DEF'},
                      {'desc': '12 Downing Street',
                       'dist': '4082',
                       'light': '-11.67/2.13',
                       'ont_id': '2',
                       'sn': 'TEST123456789GHI'},
                      {'desc': '13 Downing Street',
                       'dist': '4163',
                       'light': '-13.29/2.14',
                       'ont_id': '3',
                       'sn': 'TEST123456789JKL'}]}]]

我猜最好的方法是使用输出文件,但我还没有成功。 有什么东西可以在 TTP 中做到这一点,或者我错过了一些基本的东西吗?

谢谢

首先,我添加了 json 库。我转换了 json 输出,然后将 json 转换为 str 表达式。结果,我能够获得我想要的变量的输出。希望对您有所帮助。

import json

parser = ttp(data, template)
parser.parse()

#print result in JSON format
results_0 = parser.result(format='json')[0]
print(results_0)

#str to list **convert with json.loads
result_0 = json.loads(results_0)
print(result_0[0]['TOP_SECTION'][0]['last_downtime'])