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
|
2. 在模块的main函数中解析命令行参数或者配置文件
Your ``main()`` method can parse the command line or parse a config file with 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进行改写,这点需要特别注意。