【发布时间】:2022-05-04 20:18:44
【问题描述】:
我写了一个python模块,使用Mininet生成随机拓扑,并连接了OpenDayLight作为遥控器。
我想将命令传递给 mininet CLI,但来自 python 模块内部。生成主机和交换机并连接到遥控器后,模块随机选择2台主机作为Server和Client。 我在做与此类似的事情时遇到了麻烦,但是来自 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(请参阅“自定义网络”部分),类似的事情是可能的,但我在做这件事时遇到了很多麻烦。另外,我希望这个命令在主程序运行时在后台运行。任何反馈都表示赞赏。
【问题讨论】:
-
我在再次阅读您的问题后才意识到这一点,看来我的建议并没有真正回答您的问题。它看起来像做你想做的事,你会想使用 mininet API 代替,因为 mininet CLI 是一个交互式终端。
标签: python command-line-interface background-process mininet