Ryu oslo学习总结
為什么80%的碼農都做不了架構師?>>> ??
? ? 前段時間開始認真看了一下Ryu的源碼,發現oslo是一個非常方便的命令行解析庫,可以用于CLI和CONF的解析。oslo是OpenStack發起的項目,全稱為OpenStack?Common?Libraries,是OpenStack?Projects共享的基礎庫。
oslo
? ? 在RYU的目錄下可以找到cfg.py文件,這個文件中import了oslo的相關模塊,以便調用時減少引用數目。從文件中可以發現oslo.config.cfg文件是關鍵文件,其在系統中的文件位置在:/usr/local/lib/python2.7/dist-packages/oslo/config/cfg.py。想查看源碼的讀者可以自行查看。在該cfg.py文件中?定義了ConfigOpts類,包含了_opts,?_groups等成員變量。該類完成了命令行和配置參數的解析。
如果要快速學習某一個知識,最好的辦法就是把它用起來。所以首先我會介紹一個入門的教程。如果你沒有看懂,可以去看原始的教程。
首先安裝python-virtualenv,此python庫可以用于創建一個虛擬的,與外界隔離的運行環境,聽起來和docker好像有點像。
然后修改app.conf。添加了兩個group:simple和morestuff。simple組中有一個BoolOpt:enable。morestuff組有StrOpt,?ListOpt,?DictOpt,?IntOpt,和FloatOpt。
修改app.py文件。首先定義兩個group,再對兩個group的option進行定義。最后使用registergroup和registeropts函數來完成group和option的注冊。
完成之后,運行app.py文件。可以查看到相關輸出。?
回到RYU中,之前一篇博客介紹了Ryu的main函數。在ryu/ryu/cmd/manager.py文件中我們可以看到如下的代碼:
? ? 以上的注冊了三個Option,其中的app-lists和app參數是運行ryu-manager時的參數,即APP的名稱。在以下的main函數中,我們可以看到首先獲取了輸入的參數,若參數為空,則默認開啟ofp_handler應用。
? ? oslo模塊使用能夠使得整個工程的不同模塊可以使用同一個配置文件,從而減少了命令沖突的可能,此外,oslo提供的模板,可以讓命令解析更方便。oslo模塊以此優勢被廣泛應用與大型項目中,如openstack。
Argparse
? ? oslo模塊中使用了argparse。argparse是python標準庫中的模塊。以下以一個簡單例子介紹此模塊,更詳細的中文教程,可以查看《Python中的命令行解析工具介紹》。
在argparse模塊中定義了ArgumentParser類。我們可以調用該類的add_argument函數添加參數。其函數說明如下:
從以上說明可以看出,add_argument函數可以添加action,?type,?choices,help等重要的屬性。具體參數解釋,引用自《Python中的命令行解析工具介紹》如下:
?■name?or?flags?-?參數的名字.
?■action?-?遇到參數時的動作,默認值是store。storeconst,表示賦值為const;append,將遇到的值存儲成列表,也就是如果參數重復則會保存多個值;?appendconst,將參數規范中定義的一個值保存到一個列表;
?■count,存儲遇到的次數;此外,也可以繼承argparse.Action自定義參數解析;
?■nargs?-?參數的個數,可以是具體的數字,或者是?號,當不指定值時對于Positional?argument使用default,對于Optional?argument使用const;或者是*號,表示0或多個參數;或者是+號表示1或多個參數.
?■const?-?action和nargs所需要的常量值.
?■default?-?不指定參數時的默認值.
?■type?-?參數的類型.
?■choices?-?參數允許的值.
?■required?-?可選參數是否可以省略(僅針對optionals).
?■help?-?參數的幫助信息,當指定為argparse.SUPPRESS時表示不顯示該參數的幫助信息.
?■metavar?-?在usage說明中的參數名稱,對于必選參數默認就是參數名稱,對于可選參數默認是全大寫的參數名稱.
?■dest?-?解析后的參數名稱,默認情況下,對于可選參數選取最長的名稱,中劃線轉換為下劃線.
使用案例舉例如下:
可以通過一下命令運行prog.py去查看到相關信息:
總結
?每一個項目都會有自己的CLI或者配置文件,而使用oslo可以簡化命令解析的問題。比自己使用sys.argv手動寫解析要更高效且優雅。所以推薦大家在工程中使用oslo。后續會繼續推出Ryu學習系列文章,希望能在記錄自己學習過程的同時,給其他人提供更多的幫助。
本文來源于SDNLAB,可點擊此閱讀原文。如果您對本文感興趣,可參與以下互動方式與作者近距離交流。
(1)?微博(http://weibo.com/sdnlab/)
(2)?微信(賬號:SDNLAB)
(3)?QQ群
? ? SDN研究群(214146842)
? ? OpenDaylight研究群(194240432)
轉載于:https://my.oschina.net/sdnlab/blog/360855
總結
以上是生活随笔為你收集整理的Ryu oslo学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mirantis Certificati
- 下一篇: 关于Eclipse中的开源框架EMF(E