首页 文章

如何从python模块内部运行Mininet CLI命令

提问于
浏览
0

我编写了一个python模块,使用Mininet生成随机拓扑,并将OpenDayLight连接为远程控制器 .

我想将命令传递给mininet CLI,但是从python模块内部 . 在生成主机和交换机以及将它们连接到远程控制器之后,模块随机选择2个主机作为服务器和客户端 . 我在做类似的事情时遇到了麻烦,但是从python模块中的内联:

mininet> h<random_number> sudo python HTTPTraffic.py <SrcIP> <DstIP>

HTTPTraffic.py 是另一个带参数的模块 SrcIPDstIP

这是主模块中选择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 回答

  • 0

    我建议你看看Python模块subprocess的文档,它作为一个与平台无关的API,用于运行程序中的其他程序 .

    例如,您可以通过在代码中添加以下行来调用 ls

    subprocess.run(["ls", "-l"])
    

    run 的第一个参数采用一个字符串数组,其中每个字符串都是您正在执行的命令的一部分 .

相关问题