我在理解如何正确使用类时遇到了问题。在不使用脚本的情况下调用类构造函数会自动在交互模式下运行CLI。因此,您需要手动退出交互模式来获取类实例。只有这样,您才能使用所述实例调用类方法。这看起来很奇怪。
我要做的是编写一个程序来配置网络,然后在不同的节点上打开几个xterm窗口,并在其中启动一个应用程序。这个是可能的吗?
编辑:
例如,如下所示:
#!/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方法之前手动退出。
发布于 2016-11-22 06:13:43
我认为CLI是为在标准输入上使用而设计的,因此使用脚本而不是对CLI进行编程操作是有意义的。
如果要在不使用交互模式的情况下获取对cli对象的引用,可以通过创建一个名为"null_script“的空文本文件,然后调用
cli = CLI(net, script='null_script')您的真正目标似乎是以编程方式打开xterm并让它们运行应用程序。由于您没有给出不能使用脚本的原因,因此我提出了一个使用脚本的解决方案。将以下内容放入文本文件中:
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,这将使事情变得复杂。
https://stackoverflow.com/questions/38952265
复制相似问题