2016-08-15 40 views
0

我無法正確理解如何使用類。在沒有腳本的情況下調用類構造函數會自動以交互模式運行CLI。因此,您需要手動退出交互模式以獲取類實例。只有這樣你才能使用所述實例調用類方法。這似乎很奇怪。Mininet Python API - 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方法之前,需要手動退出。

+0

你能給出一個更具體的例子你的問題?也許有些代碼。 –

回答

0

我想CLI是用於標準輸入,所以使用腳本代替CLI的編程操作是有道理的。

如果你想獲得對無交互模式CLI對象的引用,你可以通過創建一個名爲「null_script」一個空的文本文件,然後調用

cli = CLI(net, script='null_script') 

你真正的目標做一個解決辦法似乎是以編程方式打開xterms並讓它們運行應用程序。既然你沒有給出你不能使用腳本的理由,我提出了一個使用腳本的解決方案。放在一個文本文件中的以下內容:

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命令,並通過將文件名到「sript =」。

我從term.py的makeTerm函數和superuser上的答案的屏幕填充參數中取得了命令參數。只需用你想運行的應用程序的名稱替換'ls'即可。

您試圖附加到的每個屏幕都需要一個唯一的名稱,否則您將收到一條消息,列出匹配的名稱,並且您必須爲正確的會話指定一個pid,這會使事情變得複雜。