对象属性
tornado.options.options
全局的options对象,所有定义的选项变量都会作为该对象的属性。
#example: tornado.options.define("port", default=8090, type=int, help="run server on the given port.") # 定义服务器监听端口选项 |
定义变量:tornado.options.define()
用来定义options选项变量的方法,定义的变量可以在全局的tornado.options.options中获取使用,传入参数:
- name 选项变量名,须保证全局唯一性,否则会报“Option 'xxx' already defined in ...”的错误;
- default 选项变量的默认值,如不传默认为None;
- type 选项变量的类型,从命令行或配置文件导入参数的时候tornado会根据这个类型转换输入的值,转换不成功时会报错,可以是str、float、int、datetime、timedelta中的某个,若未设置则根据default的值自动推断,若default也未设置,那么不再进行转换。可以通过利用设置type类型字段来过滤不正确的输入。
- multiple 选项变量的值是否可以为多个,布尔类型,默认值为False,如果multiple为True,那么设置选项变量时值与值之间用英文逗号分隔,而选项变量则是一个list列表(若默认值和输入均未设置,则为空列表[])。
- help 选项变量的帮助提示信息,在命令行启动tornado时,通过加入命令行参数 --help 可以查看所有选项变量的信息(注意,代码中需要加入tornado.options.parse_command_line())。
- 还有几个参数参考源码吧..
options.define中参数type
type | remark | eg |
---|---|---|
str | ||
basestring | py3下同str | 'asd' |
int | 整型 | |
float | 浮点 | |
datetime | 符合标准库 datetime.datetime | datetime.datetime(2013, 4, 28, 5, 16) |
timedelta | 符合标准库 datetime.timedelta | |
自定义: str 且含@ |
类型也可以自定义,比如email
options.define('email', type=Email)
Email是一个写好的class 用来验证是否为email
class Email(object): def __init__(self, value): if isinstance(value, str) and '@' in value: self._value = value else: raise ValueError() @property def value(self): return self._value |
使用姿势
tornado.options.parse_command_line()
转换命令行参数,并将转换后的值对应的设置到全局options对象相关属性上。追加命令行参数的方式是–myoption=myvalue
参数:final 如果为True,定义完变量后会执行一个callback函数,配合options.add_parse_callback(callback) 使用
操作姿势
options.parse_command_line() #直接用命令行参数 options.parse_command_line(["main.py", "--port=443"],final=True) #带参数 |
$ python opt.py --port=9000 |
options.parse_config_file(config_path)
从文件读取配置
写法与python一致
port=443 username='ch168' foo_bar='a' my_path = __file__ |
操作姿势
config_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "options_conf.py") options.parse_config_file(config_path) |
options.add_parse_callback(callback)
可以重复用 都会被执行