- options模块可以定义全局的变量,方便命令行传参到代码中
- 需要引入模块:import tornado.options
基础的方法和属性:
定义变量的方法:
tornado.options.define(name,default=None,type=None,help=None,metavar=None,multiple=False,group=None,callback=None);
参数 | 功能 |
---|---|
name | 参数名称 |
default | 参数的默认值 |
type | 变量的类型 |
multiple | 参数是否可以有多个值,默认为False |
help | 选项帮助信息 |
options属性:
tornado.options.options
所有定义好的变量都会成为该对象的一个属性
直接通过命令行获取参数的方法:
tornado.options.parse_command_line()
将命令行中的参数转换成options中的属性,这个方法没有参数,直接加入到代码中即可,一般加入到main函数的第一句
通过配置文件获取参数的方法:
tornado.options.parse_config_file(path)
通过配置文件给代码中的全局变量传值。path是配置文件的路径
三种传参方式的代码实现:
第一种:通过options模块传参
import tornado.web
import tornado.ioloop
import tornado.httpserver
import tornado.options #要引入options模块
# 定义2个全局变量:
# 其中port是端口号,list是一个列表,用于展示通过命令行传参的过程,
# 没有特殊的意义
tornado.options.define("port",default=8000,type=int)
tornado.options.define("list",default=[],type=str,multiple=True)
class IndexHandler(tornado.web.RequestHandler):
def get(self):
self.write("test")
if __name__=="__main__":
#转换命令行的参数,并传参到tornado.options.options中
tornado.options.parse_command_line()
# 测试命令行中的参数是否已经传进来
print(tornado.options.options.list)
print(tornado.options.options.port)
app=tornado.web.Application([
(r"/",IndexHandler)
])
httpServer=tornado.httpserver.HTTPServer(app)
httpServer.bind(tornado.options.options.port) #这里绑定的端口是options中的port属性
httpServer.start(1)
# 我感觉上面这句代码是没必要的,但是实际操作下来这句代码是要加的,否则浏览器一直在转圈
# 显示不了IndexHandler中的结果
tornado.ioloop.IOLoop.current().start()
在命令行中输入:
然后显示port和list通过命令行传参后更新的结果:分别为端口号9000和列表[‘test1’,‘test2’,‘test3’]
此时在浏览器中输入:http://localhost.9000,可以看到如下内容:
第二种:通过options模块和普通配置文件来传参:
import tornado.web
import tornado.ioloop
import tornado.httpserver
import tornado.options
tornado.options.define("port",default=8000,type=int)
tornado.options.define("list",default=[],type=str,multiple=True)
class IndexHandler(tornado.web.RequestHandler):
def get(self):
self.write("test")
if __name__=="__main__":
# 通过config文件传参到tornado.options.options中
tornado.options.parse_config_file('config.py')
# 测试命令行中的参数是否已经传进来
print(tornado.options.options.list)
print(tornado.options.options.port)
app=tornado.web.Application([
(r"/",IndexHandler)
])
httpServer=tornado.httpserver.HTTPServer(app)
httpServer.bind(tornado.options.options.port)
httpServer.start(1)
tornado.ioloop.IOLoop.current().start()
配置文件(config.py)中的内容:
port=9000
list=['test1','test2','test3']
此时直接运行代码即可,不用在命令行中输入参数的值了
第三种:不用options模块,直接使用.py文件传参
这种方式是主流的方式
import tornado.web
import tornado.ioloop
import tornado.httpserver
import config # 引入config模块
class IndexHandler(tornado.web.RequestHandler):
def get(self):
self.write("test")
if __name__=="__main__":
app=tornado.web.Application([
(r"/",IndexHandler)
])
httpServer=tornado.httpserver.HTTPServer(app)
httpServer.bind(config.options["port"]) # 绑定参数port的值
httpServer.start(1)
tornado.ioloop.IOLoop.current().start()
配置文件config.py的内容:
options={
"port":9000,
"list":['test1','test2','test3']
}
这种方法下直接运行代码就可以运行服务器,不用在命令行中输入参数的值。
使用下面这2个语句时:
parse_command_line()
parse_config_file
tornado会启动logging日志模块,在终端打印信息。
如果要关闭这个功能,有2种方式:
1.在主函数的第一行添加:
tornado.options.options.logging=None
2 在命令行中输入参数:
–logging=none
例如可以输入:
python test.py --logging=none