tornado-option模块分析
来源:互联网 发布:国家基础地理数据 编辑:程序博客网 时间:2024/06/02 04:25
def set_configs(port=9998, env='local'): if 'env' not in options: sys.path.append('mobile') env = os.environ.get('HAOHUANENV', env) args = {'env': env, 'port': port} args_len = len(sys.argv) for i, a in enumerate(sys.argv[::-1]): if a.startswith('--'): key, val = a.split('--')[-1].split('=') if key in args: args[key] = val del sys.argv[args_len - i - 1] for k, v in args.items(): define(k, default=v) settings_dir = os.path.join(os.path.abspath(os.path.dirname(os.path.dirname(__file__))), 'settings') settings_path = os.path.join(settings_dir, 'settings_%s.py' % options.env) parse_config_file(settings_path)
首先贴一个自己读取配置文件代码段。
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 类,使其支持终端下的彩色输出,还做了一些格式调整。默认的配置会将日志输出到文件和终端错误输出。
除了对选项的数据结构的处理,本模块中有关日志格式化和终端彩色控制的方法也很值得一看。
1. 源码中的示例代码,定义全局变量:
from tornado.options import define, options
define("mysql_host", default="127.0.0.1:3306", help="Main user DB")
define("memcache_hosts", default="127.0.0.1:11011", multiple=True,
help="Main user memcache servers")
def connect():
db = database.Connection(options.mysql_host)
...
2. 在模块的main函数中解析命令行参数或者配置文件
Your ``main()`` method can parse the command line or parse a config file with
either::
tornado.options.parse_command_line()
# or
tornado.options.parse_config_file("/etc/server.conf")
3. Tornado.options默认是定义为单例模式的,通过tornado.options.options对象来维护全局参数,如果在线程中需要维护自己的变量,也可以使用tornado.options. OptionParser对象来维护参数。tornado.options.options就是通过实例OptionParser的对象来实现的,而且把define、parse_command_line、parse_config_file放到tornado.options 包中,可以直接使用,与调用tornado.options.options的方法是一致的。
main.py : define("port", default=8888, help="run on the given port", type=int) parse_command_line() print(options.port)如果执行python main.py 8888如果执行python main.py --port=9999 9999
4.注意
在tornado应用中,应该特别注意logging级别设置同tornado.options.parse_command_line的先后顺序。
如果在tornado.options.parse_command_line()之前程序对logging的日志级别进行了设置,则很有可能会被tornado进行改写,这点需要特别注意。
https://github.com/sliderSun
- tornado-option模块分析
- Tornado httpserver模块
- tornado异步模块汇总
- Tornado模板机制分析
- Tornado源码分析
- Tornado: 1. 流程分析
- Tornado异步原理分析
- tornado源码分析
- Tornado IOStream类分析
- TORNADO源码分析
- tornado源码分析-Application
- tornado服务器session模块mongosion
- Tornado: 2. 源码分析 (3)
- Tornado 之 IOLoop类分析
- tornado 启动处流程分析
- Tornado源码分析之IOLoop
- cherrypy和tornado性能分析
- Tornado源码分析1-Configurable
- JVM高级特性与实践(三):垃圾收集算法 与 垃圾收集器实现
- (使用通过混淆+自己第三方保留成功混淆)AndroidStudio 混淆打包
- UVA1602LatticeAnimal
- android设置启动splash图片(消除启动白屏)不使用Appcompat主题设置的方法
- Crazepony的理念
- tornado-option模块分析
- java开发微信将消息转发到多客服
- Weird Rounding
- 外观模式(facade)c++版本
- java 后台的学习步骤
- 微信用户提现不能到账,显示NO_AUTH | 产品权限验证失败,请查看您当前是否具有该产品的权限
- 集群部署spark
- 各种获取设备唯一标识的方法介绍
- 统计访问数量