首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mininet Python API - CLI类

Mininet Python API - CLI类
EN

Stack Overflow用户
提问于 2016-08-15 17:07:46
回答 1查看 892关注 0票数 1

我在理解如何正确使用类时遇到了问题。在不使用脚本的情况下调用类构造函数会自动在交互模式下运行CLI。因此,您需要手动退出交互模式来获取类实例。只有这样,您才能使用所述实例调用类方法。这看起来很奇怪。

我要做的是编写一个程序来配置网络,然后在不同的节点上打开几个xterm窗口,并在其中启动一个应用程序。这个是可能的吗?

编辑:

例如,如下所示:

代码语言:javascript
复制
#!/usr/bin/python

from mininet.net import Mininet
from mininet.log import setLogLevel
from mininet.cli import CLI
from mininet.topolib import TreeTopo

def test():
    "Create and test a simple network"
    net = Mininet(TreeTopo(depth=2,fanout=2))
    net.start()
    cli = CLI(net)
    CLI.do_xterm(cli, "h1 h2")
    net.stop()

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

调用CLI类构造函数以获取类实例会以交互模式自动启动mininet。这需要在类实例上调用do_xterm方法之前手动退出。

EN

回答 1

Stack Overflow用户

发布于 2016-11-22 06:13:43

我认为CLI是为在标准输入上使用而设计的,因此使用脚本而不是对CLI进行编程操作是有意义的。

如果要在不使用交互模式的情况下获取对cli对象的引用,可以通过创建一个名为"null_script“的空文本文件,然后调用

代码语言:javascript
复制
cli = CLI(net, script='null_script')

您的真正目标似乎是以编程方式打开xterm并让它们运行应用程序。由于您没有给出不能使用脚本的原因,因此我提出了一个使用脚本的解决方案。将以下内容放入文本文件中:

代码语言:javascript
复制
py h1.cmd('screen -dmS mininet.h1')
sh xterm -title Node:h1 -e screen -D -RR -S mininet.h1 &
sh screen -x -S mininet.h1 -X stuff 'ls'`echo '\015'`

在cli中使用这个文本文件作为脚本可以在CLI上使用'source‘命令,也可以通过将文件名传递给'sript=’来实现。

我从term.py中的makeTerm函数中获取命令参数,并从superuser上的答案中获取屏幕内容参数。只需将“ls”替换为要运行的应用程序的名称即可。

您尝试附加到的每个屏幕都需要有一个唯一的名称,否则您将收到一条列出匹配名称的消息,并且您将不得不为正确的会话指定pid,这将使事情变得复杂。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38952265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档