Python将任意输出转换为table或lis

2024-05-15 06:29:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个python脚本,该脚本将连接到HP C7000机箱上的board Admin,列出所有刀片服务器,并根据名称确定托架ID,然后使用它列出内部交换机端口ID

登录并执行脚本的第二部分(显示实际的端口映射)后。响应缓冲区将包含此长字符串。在

b'show server port map 1\r\n              Mezz\r\nMezz   Mezz  Device  Port      Interconnect Interconnect\r\nSlot  Device  Port  Status         Bay        Bay Port       Device ID\r\n----  ------ ------ ---------- ------------ ------------ ----------------\r\n\r\n------------------------------- Blade 001 -------------------------------\r\n\r\n    1 QLogic QMH2562 8Gb FC HBA for HP BladeSystem c-Class\r\n            Port 1 OK            Bay 3        Port 1     50:01:43:80:21:db:8c:54\r\n            Port 2 OK            Bay 4        Port 1     50:01:43:80:21:db:8c:56\r\n\r\n    2 Not Present\r\n\r\n    3 Not Present\r\n\r\n      FlexFabric Embedded Ethernet\r\n Ethernet (NIC 1) LOM:1-a OK     Bay 1        Port 9     00:9C:02:AA:8C:58\r\niSCSI HBA (iSCSI 1) LOM:1-b OK   Bay 1        Port 9     00:9C:02:AA:8C:59\r\n  FCoE HBA LOM:1-b OK            Bay 1        Port 9     10:00:00:9C:02:AA:8C:59\r\n Ethernet (NIC 2) LOM:2-a OK     Bay 2        Port 9     00:9C:02:AA:8C:5C\r\niSCSI HBA (iSCSI 2) LOM:2-b OK   Bay 2        Port 9     00:9C:02:AA:8C:5D\r\n  FCoE HBA LOM:2-b OK            Bay 2        Port 9     10:00:00:9C:02:AA:8C:5D\r\n Ethernet (NIC 5) LOM:3-a OK     Bay 1        Port 1     00:9C:02:AA:8C:60\r\niSCSI HBA (iSCSI 3) LOM:3-b OK   Bay 1        Port 1     00:9C:02:AA:8C:61\r\n  FCoE HBA LOM:3-b OK            Bay 1        Port 1     10:00:00:9C:02:AA:8C:61\r\n Ethernet (NIC 6) LOM:4-a OK     Bay 2        Port 1     00:9C:02:AA:8C:64\r\niSCSI HBA (iSCSI 4) LOM:4-b OK   Bay 2        Port 1     00:9C:02:AA:8C:65\r\n  FCoE HBA LOM:4-b OK            Bay 2        Port 1     10:00:00:9C:02:AA:8C:65\r\n[maros@jump ~]$ '

用.decode(“utf-8”)格式化它可以让我的输出更具可读性 enter image description here

我感兴趣的是具有MAC地址的行,因为它们包含Bay ID和Port ID。简而言之,我想将输出分解为各个行,根据包含MAC地址的那些行进行过滤并提取感兴趣的信息(Bay ID和Port ID)。为了让事情变得更难,输出可以有一个稍微不同的格式,如下所示:

enter image description here

最好的办法是什么?在


Tags: 脚本idportdeviceokhpaanic
1条回答
网友
1楼 · 发布于 2024-05-15 06:29:53

如果使用regex,这听起来很简单,因为只有您感兴趣的行实际上包含了所有属性(bay id、port id和mac)。在

想象一下下面的测试(它实际上可以写成一个行程序,但是让我们把它扩展为更容易阅读):

import re
r=re.compile(r"\sPort\s+(\d+)\s+Bay\s+(\d+)\s+(([0-9A-F]{2}:){5,}..)")
for line in lines:
    m = r.match(line)
    if not m: continue
    print("We have bay %s slot %s mac %s"%(m.group(1), m.group(2), m.group(3))

相关问题 更多 >

    热门问题