我编写了一个python模块,使用Mininet生成随机拓扑,并将OpenDayLight连接为远程控制器 .
我想将命令传递给mininet CLI,但是从python模块内部 . 在生成主机和交换机以及将它们连接到远程控制器之后,模块随机选择2个主机作为服务器和客户端 . 我在做类似的事情时遇到了麻烦,但是从python模块中的内联:
mininet> h<random_number> sudo python HTTPTraffic.py <SrcIP> <DstIP>
HTTPTraffic.py
是另一个带参数的模块 SrcIP
和 DstIP
这是主模块中选择2个随机主机并获取其IP的部分 . 我希望 HTTPTraffic.py
能够在主机上运行 SrcIP
Nodes = list(range(1,h))
Src = random.choice(Nodes) # randomly chooses 1 host
Nodes.remove(Src)
Dst = random.choice(Nodes) # randomly chooses another host
SrcName = 'h%s' %(Src)
DstName = 'h%s' %(Dst)
SrcNode=net.get(SrcName)
DstNode=net.get(DstName)
SrcIP = SrcNode.IP() # IP retrieval of chosen hosts
DstIP = DstNode.IP()
print ('The Souce/Client is: '+ SrcName)
print (SrcIP)
print ('The Destination/Server is: '+ DstName)
print (DstIP)
SrcName +".cmd('sudo python HTTPTraffic.py "+SrcIP+" " +DstIP+"')" # this is where I am having trouble
从mininet API documentation(参见'Customizing a Network'部分),这样的事情是可能的,但我在做这件事时遇到了很多麻烦 . 此外,我希望在主程序运行时此命令在后台运行 . 任何反馈都表示赞赏 .
1 回答
我建议你看看Python模块subprocess的文档,它作为一个与平台无关的API,用于运行程序中的其他程序 .
例如,您可以通过在代码中添加以下行来调用
ls
:run
的第一个参数采用一个字符串数组,其中每个字符串都是您正在执行的命令的一部分 .