tornado: options.py

问题:

1.Options.py在tornado里面起什么作用?

2.这个模块中包含什么方法?

3.各个方法有什么作用?

4.使用此模块的典型场景

5.使用各个函数的典型场景

边看边答:

1.呃,基本上现在我的理解就是:Options提供一个透明,简单的方法,使得一个module可以很容易从tornado统一的接口中获得所需要的外来参数,例如:

  • 从命令行获得
    #!/ur/bin/env python
    '''Test.py'''
    
    from tornado.options import define, options
    
    define("param1", default="it's parameter 1", help="value for param 1")
    define("param2", default="it's parameter 2", help="value for param 2")
    
    options.parse_command_line()
    
    if __name__ == "__main__":
        print options.param1
        print options.param2
    
    ### End of Test.py ####
    
    python Test.py
    >>>it's parameter 1
    >>>it's parameter 2
    
    python Test.py --param1="Hello world"
    >>>Hello world
    >>>it's parameter 2
    
    python Test.py --param1="Hello" --param2="world"
    >>>Hello
    >>>world
     
  • 从配置文件获得
    嗯,这个例子就不写了,和上面不一样的地方就是使用
    tornado.options.parse_config_file(path_to_config_file)

嗯,我知道你们会问,其实是因为我自己不知道,加入从命令行给出的参数模块里没有通过define定义过怎么办?其实是这样,对于这种情况,tornado会抛出异常。。。

2. 呃看关键的Module暴露出来的几个函数吧, 不过在此之前,需要先说这里面包含的几个重要的类

类一: _Options,字典类,以文件名为键,以等一下要说的另外一个类的集合作为值,也就是说,一个filename对应一票Option,所以从另外一个角度说,_Options这个映射类的实例是一个顶层的全局变量

类二: _Option,嗯,没啥好说的,在类内部定义了一下用来把参数变成Python类型实例的parser而已

Module内关键的几个函数

  • define:
    正如上面例子里面看到的,定义了当前module大概可能也许需要的从外部获得的参数,在module内部使用这些个参数的时候既然使用了tornado,那么可以使用tornado.options.name_of_parameter来获得参数的值。然后这个时候Options这个全局变量就会根据当前Callee的文件名以及param的名字去找了。。
  • parse_command_line:
  • parse_config_file

需要注意的是,如果只define了没有调用任何一个parse,那基本上是无用的。。。。

在Options.py这个module里面tornado顺便定义了几个可用参数。。

define("help", type=bool, help="show this help information")
define("logging", default="info",
       help=("Set the Python log level. If 'none', tornado won't touch the "
             "logging configuration."),
       metavar="debug|info|warning|error|none")
define("log_to_stderr", type=bool, default=None,
       help=("Send log output to stderr (colorized if possible). "
             "By default use stderr if --log_file_prefix is not set and "
             "no other logging is configured."))
define("log_file_prefix", type=str, default=None, metavar="PATH",
       help=("Path prefix for log files. "
             "Note that if you are running multiple tornado processes, "
             "log_file_prefix must be different for each of them (e.g. "
             "include the port number)"))
define("log_file_max_size", type=int, default=100 * 1000 * 1000,
       help="max size of log files before rollover")
define("log_file_num_backups", type=int, default=10,
       help="number of log files to keep")

猜你喜欢

转载自9esuluciano.iteye.com/blog/1772655