如何从DOT文件中获取端口信息

时间:2014-10-30 09:14:19

标签: python graph pygraphviz

我有以下拓扑DOT文件(test.dot)。此点文件以交换机端口名称方式维护网络拓扑。

digraph G {
   "R1":"swp1" -> "R3":"swp3"; // Port swp1 of switch R1 is connected to port swp3 of R3
   "R1":"swp2" -> "R4":"swp3";
   "R1":"swp3" -> "R5":"swp3";
   "R1":"swp4" -> "R6":"swp3";
 }

我在python中使用pygraphviz库来读取图形。

源代码:

#!/usr/bin/env python
from pygraphviz import *

G = AGraph("test.dot")

for edge in G.edges():
    print edge

输出:

(u'R1', u'R6')
(u'R1', u'R4')
(u'R1', u'R3')
(u'R1', u'R5')

我面临的问题是API没有提供端口信息 如何从API获取端口信息?

2 个答案:

答案 0 :(得分:1)

这不是一个非常光滑的界面。但是你可以这样得到数据:

In [2]: G.get_edge('R1','R3').attr['headport']
Out[2]: u'swp3'

In [3]: for e in G.edges():
    print e,e.attr
   ...:     
(u'R1', u'R3') {u'tailport': u'swp1', u'headport': u'swp3'}
(u'R1', u'R4') {u'tailport': u'swp2', u'headport': u'swp3'}
(u'R1', u'R5') {u'tailport': u'swp3', u'headport': u'swp3'}
(u'R1', u'R6') {u'tailport': u'swp4', u'headport': u'swp3'}

答案 1 :(得分:0)

以下片段完成了工作 for edge in G.edges(): print edge print "edge-ports:", print edge.attr.get("headport", None)