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进行改写,这点需要特别注意。