tornado.options源码学习

原创
2013/10/12 22:27
阅读数 585

tornado源码分析之options模块

###1.概述 A command line parsing module that lets modules define their own options 简单的命令行解析模块

options 模块实现了一个功能相对简单的参数选项解析器。 _Option 类对应每个选项,它可以对 datetime 、 timedelta 、 bool 、 basestring 类型做相应的检查和类型转换,同时还支持将多值的选项转换为列表。 _Options 类在 _Option 的基础上,继承 dict 来实现了一个解析器,支持从命令行和文件两种方式加载选项,同时对选项分组,默认按文件名分组。

options 模块定义了一个全局的 options 字典。

options 中包含了一些预定义的选项,主要为日志相关的配置。Tornado中有关日志的配置也放在了本模块中,并封装了 logging.Formatter 类,使其支持终端下的彩色输出,还做了一些格式调整。默认的配置会将日志输出到文件和终端错误输出。

除了对选项的数据结构的处理,本模块中有关日志格式化和终端彩色控制的方法也很值得一看。

###2.核心类和函数

  • options模块
    • OptionParser类: collection of options, a dictionary with object-like access.Normally accessed via static functions in the tornado.options module,which reference a global instance: 配置集合,对象式访问字典元素,通常在tornado.options模块中通过静态函数访问,因为在模块中已经定义了options,OptionParser对象的实例

      • items() 返回A sequence of (name, value) pairs
      • groups() 返回The set of option-groups created by define,分组组名的set集合
      • group_dict(group) The names and values of options in a group根据指定的group组名获取对应组名下的所有option
      • as_dict() 所有字典类型的所有option,The names and values of all options
      • define()
      • parse_command_line()
      • parse_config_file()
      • print_help()
      • add_parse_callback()
      • run_parse_callbacks()
    • _Option类: 定义单个option对象

      • value() 返回定义的值,否则返回default值
      • parse() 解析并执行回调 返回value值
      • set() 设置_value并执行回调callback
    • options = OptionParser()

      • Global options object.All defined options are available as attributes on this object:全局options对象,所有定义的options均有效的成为options对象的属性
    • define()函数

      • Defines an option in the global namespace:在全局变量命名空间里定义option
      • 调用的是OptionParser.define方法
    • parse_command_line()函数

      • Parses global options from the command line: 从命令行中解析全局配置
      • 调用的是OptionParser.parse_command_line方法
    • parse_config_file()函数

      • parses global options from a config file:从配置文件中解析全局配置
      • 调用的是OptionParser.parse_config_fil方法
    • print_help()函数

      • Prints all the command line options to stderr (or another file):打印所有的命令行配置到终端
      • 调用的是OptionParser.print_help方法
    • add_parse_callback()函数

      • Adds a parse callback, to be invoked when option parsing is done: 手动全局增加一个解析回调,当配置解析完毕即调用parse_command_line或者parse_config_file时callback开始执行生效
      • OptionParser.add_parse_callback

###3. 举例 test.py : define("port", default=8888, help="run on the given port", type=int) parse_command_line() print(options.port) 如果执行python test.py 8888 如果执行python test.py --port=9999 9999

###4.注意 在tornado应用中,应该特别注意logging级别设置同tornado.options.parse_command_line的先后顺序。

如果在tornado.options.parse_command_line()之前程序对logging的日志级别进行了设置,则很有可能会被tornado进行改写,这点需要特别注意。

展开阅读全文
打赏
0
1 收藏
分享
加载中
更多评论
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部