使用 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'])
我正在使用 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'])