tornado.options源码学习

本文详细解读了Tornado框架中用于处理命令行参数的options模块,包括其核心类、函数及其工作流程,提供了从命令行和配置文件加载选项的示例,并讨论了在实际应用中需要注意的关键细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

转载于:https://my.oschina.net/dragondjf/blog/168413

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值