为什么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学习总结相关推荐

  1. 生动的SDN基础内容介绍(三)--Ryu控制器

    生动的SDN基础内容介绍(三)--Ryu控制器 控制器 Ryu的目录 Ryu的学习 simple_switch_13.py simple_switch_rest_13.py 交换机信息及流表项的查询 ...

  2. SDN学习之旅-RYU笔记(1)

    前言 SDN 是未来网络的发展方向,其中RYU是受到大家推荐的控制器,今天,我们就来学习它. 目录 文章目录 前言 目录 正文 小试牛刀 扩展插件 友情支持 正文 RYU是日本公司开发的SDN控制框架 ...

  3. SDN学习之旅-RYU笔记(2)

    前言 SDN 是未来网络的发展方向,其中RYU是受到大家推荐的控制器,今天,我们就来学习它. 目录 文章目录 前言 目录 实现你的控制器 第一个例子 功能增加 实现你的控制器 如果你想控制网络设备,比 ...

  4. RYU控制器的学习笔记(二)

    楔子:openflow1.3的状态转移图 0.SDN交换机的TCP主动连接 8s一个包, 同样的,tcp连接成功后,马上发送hello包 之后8s一个Hello包 如果没收到hello的回复包,是不会 ...

  5. RYU控制器的学习笔记(一) ryu.app.rest_router的分析

    参考链接:https://www.cnblogs.com/goldsunshine/p/11720310.html 1.默认的流表 当你启动任何一个ryu app之后,交换机的流表就被设置为默认的下面 ...

  6. RYU控制器的学习笔记(三) 利用观察者模式通知app处理报文

    当一个流量包通过tcp报文发送到6633端口的时候,会发生什么? def _recv_loop(self):........msg = ofproto_parser.msg(self, version ...

  7. oslo config

    前段时间开始认真看了一下Ryu的源码,发现oslo是一个非常方便的命令行解析库,可以用于CLI和CONF的解析.oslo是 OpenStack发起的项目,全称为OpenStack Common Lib ...

  8. 深度学习目标检测模型全面综述:Faster R-CNN、R-FCN和SSD

    为什么80%的码农都做不了架构师?>>>    Faster R-CNN.R-FCN 和 SSD 是三种目前最优且应用最广泛的目标检测模型,其他流行的模型通常与这三者类似.本文介绍了 ...

  9. Bioinformatics | 预测药物-药物相互作用的多模态深度学习框架

    今天给大家介绍来自华中农业大学信息学院章文教授课题组在Bioinformatics上发表的一篇关于预测药物与药物相互作用事件的文章.作者提出了一个多模态深度学习框架- DDIMDL.它将不同的药物特征 ...

最新文章

  1. DS博客大作业--树
  2. java程序员面试中的5个杀手锏问题
  3. 他曾经负债2.5亿,如今身价超过500亿
  4. 可编程的智能小车,100种玩法,让孩子玩出理科编程思维
  5. Windows 8的企业部署之路漫漫兮
  6. 计算机网络之传输层:4、TCP连接管理
  7. 信息学奥赛一本通 1181:整数奇偶排序 | OpenJudge NOI 1.10 06:整数奇偶排序
  8. viewpager的优化
  9. 在使用avalon框架的时候,用ms-duplex双工绑定,在template上是有数据渲染的,但是js里面却是undefined...
  10. CV进阶 -- 目标检测原理及代码实现、YOLO源码解读学习
  11. keil5打开keil4工程无法下载程序
  12. qt 在ubuntu下的下载安装及测试
  13. LeetCode——110,判断平衡二叉树
  14. Java实现输出100-1000的水仙花数
  15. nmap -oG -iL 写入文件和读取文件之[网鼎杯 2020 朱雀组]Nmap
  16. 贵阳CBD造型怪异 或扭曲或变形
  17. Java题目:动物声音模拟器
  18. org.springframework.beans.factory.UnsatisfiedDependencyException
  19. Flask asyncio 异步处理请求
  20. 2019神舟质量_2019质量周

热门文章

  1. python怎么调用局部变量_python基础:局部变量--全局变量的使用
  2. exec 和 call 用法详解
  3. XP中怎样让批处理文件运行后,不关闭dos窗口
  4. Count on a tree
  5. Masonry('couldn't find a common superview for)
  6. Linux操作系统:12则经典运用技巧
  7. step4 . day1标准IO和文件IO
  8. c#4.0新特性之一: Dynamic Lookup (1)
  9. 【laravel5.4 + TP5.0】hasOne和belongsTo的区别
  10. 深入SQL SERVER 2000的内存管理机制