2017-08-17 13 views
0

私はHP C7000シャーシのOnboard Adminに接続し、すべてのブレードサーバをリストし、名前に基づいてベイIDを決定し、内部スイッチをリストするために使用しますポートID。任意の出力をテーブルまたはリストに変換するPython

ログインしてスクリプトの2番目の部分(実際のポートマップを表示)を実行した後。レスポンスバッファにはこの長い文字列が含まれます。彼らはベイ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[[email protected] ~]$ ' 

.decode(「UTF-8」)でこれをフォーマットすると、私は読みやすく、人間の出力が得られます enter image description here

は、MACアドレスを持つラインであり、ポートID。要するに、出力を個々の行に分割し、MACアドレスを含むフィルタに基づいてフィルタをかけ、興味のある情報(Bay IDとPort ID)を抽出したいと考えています。物事を難しくするために、出力はわずかこのような異なるフォーマットを持つことができます:

enter image description here

これにアプローチするための最良の方法だろうか?

+0

はgrepをしようとしたしましたか? 'grep -E 'mac1 | man2 | macN' – geckos

+0

これは* nix環境ではうまくいくと思いますが、私はこのpythonスクリプトの中にいたいと思います。この出力を使って別の操作を実行したいと思います。各ブレードスイッチのこれらのポートにVLANを設定します。 – Maros

答えて

0

これは実際に興味のある行だけに実際にすべてのプロパティ(bay id、port id、およびmac)が一緒に含まれているため、正規表現で行うとかなり簡単です。

次の試験(それは実際には1つのライナーのように書くことができますが、読みやすいように、それを拡張することができます)想像:

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)) 
+0

私が表現して、このアプローチを好むが、私はそれなしで、私はバッファからその応答を再梱包する必要があることを感じている、それはラインとして各文字を扱います: M 電子 Z Z \ rを \ N M E Z Z M E Z Z D E V 私 C 電子 P O R トン – Maros

+0

あなたが詰め直すとはどういう意味?出力がバイトの場合は、文字列にエンコードし、新しい行で分割する必要があります。それで、あなたはループのために上記を適用することができます。 – geckos

関連する問題