gpt4 book ai didi

python - 如何在 Python 中解析输出并在循环中使用它

转载 作者:太空宇宙 更新时间:2023-11-04 00:17:12 25 4
gpt4 key购买 nike

我需要从以下 UPD.result 输出中提取“xe-1/2/0”:

interface xe-1/2/0.0;
interface ge-1/2/1.0;
interface lo0.0 {

(这是“show configuration protocols ospf| match int”命令的输出)来自列表中的一个框。)


我正在使用 netmiko 库连接到网络设备并找到一些参与 OSPF 协议(protocol)的接口(interface),然后我想检查这些接口(interface)上的错误计数。

import getpass
import sys
import time
import textfsm
import os
from tabulate import tabulate
import re


from netmiko import ConnectHandler

USER = raw_input("Login:")
PASSWORD = getpass.getpass()
FILENAME = raw_input("Name of file with results:")
GETPATH= os.getcwd()
GETPATH2 = (GETPATH+'/IP-ADD.txt')
GETPATH3 = (GETPATH+'/template-desc.template')

BOXES_IP = [line.strip() for line in open(GETPATH2, 'r')]
print(BOXES_IP)

for IP in BOXES_IP:
print('CONNECTION TO DEVICE {}'.format(IP))
try:
DEVICE_PARAMS = {'device_type': 'juniper_junos',
'ip': IP,
'username':USER,
'password':PASSWORD,
'verbose': True}
with ConnectHandler(**DEVICE_PARAMS) as sss:
sss.enable()

result = sss.send_command('show configuration protocols ospf| match int')
hostname = sss.send_command('show configuration system host-name')
print(result)
except:
print('CONNECTION TO DEVICE FAILS {}'.format(IP))
continue

f = open(FILENAME+'.txt', 'a')
for row in hostname:
f.write(row)
for row in result:
f.write(row)
f.close()

regex = re.compile(r'^(xe.[0-9].[0-9].[0-9])')
results_list = []

b = open(FILENAME+'.txt', 'r')
print b
for line in b:
match = regex.search(line)
if not match: continue
results_list.append(match.group())
print results_list

我需要解析命令'show configuration protocols ospf| 的输出匹配 int' 并找到 xe(例如 xe-0/0/1)接口(interface),然后输入 'show interface xe-** * extensive' 命令并在文件中打印结果。

我该怎么做?

我正在尝试使用编译来解析输出文件,但它不起作用。

更新。

print(result)

输出:

interface lo0.0 {
interface xe-1/3/1.0;
interface ge-1/2/0.0;
interface xe-1/3/0.0;

拆分结果

    for l in result.split("\n"):
l = l.split(" ")
print l

[u'']
[u'', u'', u'', u'', u'interface', u'lo0.0', u'{']
[u'', u'', u'', u'', u'interface', u'xe-1/3/1.0;']
[u'', u'', u'', u'', u'interface', u'ge-1/2/0.0;']
[u'', u'', u'', u'', u'interface', u'xe-1/3/0.0;']
[u'']

最佳答案

恕我直言,正则表达式对于此任务来说是矫枉过正且容易出错。我会做类似的事情:

result ="""interface xe-1/2/0.0;
interface ge-1/2/1.0;
interface lo0.0 {
"""

for l in result.split("\n"):
l = l.split(" ")
if l[0] == "interface": # cause grep on "int"
iface = l[1]
if iface[0:3] == "xe-":
arg=iface.split(".")[0]
# do something with arg
print(arg)

产生:

xe-1/2/0

关于python - 如何在 Python 中解析输出并在循环中使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50465865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com