TypeError:__ init __()得到了一个意外的关键字参数' delay'

时间:2014-06-09 23:03:56

标签: python

我在下面的python程序中得到一个TypeError,其中正在调用构造函数。如果我删除延迟参数,我会得到与" bw"相同的错误。我无法弄清楚这个错误。请帮忙。

我正在尝试使用python创建网络拓扑。

#!/usr/bin/python

from mininet.topo import Topo
from mininet.net import Mininet
from mininet.util import irange,dumpNodeConnections
from mininet.log import setLogLevel

class CustomTopo(Topo):

    def __init__(self, linkopts1, linkopts2, linkopts3, fanout=2, **opts):
        # Initialize topology and default options
        Topo.__init__(self, **opts)

        # Add your logic here ...
        switch=self.addSwitch('c1')

        self.linkopts1=linkopts1
        self.linkopts2=linkopts2
        self.linkopts3=linkopts3

        self.fanout=fanout
        n=0

        for i in irange(1,fanout):
                s=self.addSwitch('a%s' % i)
                self.addLink(switch,s,**linkopts1)

                if i==1:
                        n=0
                else:
                        n=1
                for j in irange(1,fanout):
                        if n==0:
                                sw=self.addSwitch('e%s' % j)              #To generate labels e1, e2, e3 and e4:
                        else:                                             #if n=0, edge switches e1 and e2 are added to a1
                                sw=self.addSwitch('e%s' % (j+2))            #if n=1, edge switched e3 and e4 are added to a2
                        self.addLink(s,sw,**linkopts2)

                        for k in irange(1,fanout):
                                if ((j==1)&(n==0)):
                                        host=self.addHost('h%s' % k)      #For edge switch e1, j=1,n=0. End-hosts are h1 and h2.
                                elif ((j==2)&(n==0)):
                                        host=self.addHost('h%s' % (k+2))  #For edge switch e2, j=2,n=0. End-hosts are h3 and h4.
                                elif ((j==1)&(n==1)):
                                        host=self.addHost('h%s' % (k+4))  #For edge switch e3, j=1,n=1. End-hosts are h5 and h6.
                                elif ((j==2)&(n==1)):
                                        host=self.addHost('h%s' % (k+6))  #For edge switch e4, j=2,n=1. End-hosts are h7 and h8.
                                self.addLink(sw,host,**linkopts3)


def treeTest():
        linkopts1=dict(bw=10, delay='5ms')
        linkopts2=dict(bw=10, delay='5ms')
        linkopts3=dict(bw=10, delay='5ms')
        topo=CustomTopo(linkopts1,linkopts2,linkopts3,fanout=2)
        net=Mininet(topo)
        net.start()
        print "Dumping node connections"
        dumpNodeConnections(net.hosts)
        print "Testing network connectivity"
        net.pingAll()
        net.stop()

if __name__=='__main__':
        setLogLevel('info')
        treeTest()



topos = { 'custom': ( lambda: CustomTopo() ) }

我得到的错误跟踪是:

Traceback (most recent call last):
  File "CustomTopo.py", line 70, in <module>
    treeTest()
  File "CustomTopo.py", line 60, in treeTest
    net=Mininet(topo)
  File "/usr/local/lib/python2.7/dist-packages/mininet-2.1.0-py2.7.egg/mininet/net.py", line 164, in __init__
    self.build()
  File "/usr/local/lib/python2.7/dist-packages/mininet-2.1.0-py2.7.egg/mininet/net.py", line 357, in build
    self.buildFromTopo( self.topo )
  File "/usr/local/lib/python2.7/dist-packages/mininet-2.1.0-py2.7.egg/mininet/net.py", line 344, in buildFromTopo
    self.addLink( src, dst, srcPort, dstPort, **params )
  File "/usr/local/lib/python2.7/dist-packages/mininet-2.1.0-py2.7.egg/mininet/net.py", line 287, in addLink
    return cls( node1, node2, **defaults )
TypeError: __init__() got an unexpected keyword argument 'delay'

2 个答案:

答案 0 :(得分:21)

请记住将链接类型设置为tc。

在脚本中指定它,如下所示:

net = Mininet(topo=topo, link=TCLink)

请记住在python脚本中导入TCLink:

from mininet.link import TCLink

相反,如果要从命令提示符调用mininet,请按以下方式设置--link参数:

sudo mn --custom custom.py --topo customtopo --link tc

答案 1 :(得分:0)

无论是在mininet还是我怀疑OpenVswitch,一个对象被传递给你的一个linkopts,其中bw和delay作为关键字参数。但是,该对象不期望您使用的关键字参数。也许你在mininet和openvswitch之间有版本不匹配?我看到当前示例中列出的bw和延迟,但我没有域经验知道它们是旧引用还是您有较旧的库。

不幸的是,试用你的代码片段需要比我有时间更多的配置。我试过简单的“apt-get openvswitch-controller python-openvswitch”,但我无法让它运行。