tornado-option模块分析

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)