1. 程式人生 > >oslo_config 實現命令列

oslo_config 實現命令列

oslo_config 是openstack 的命令列和配置庫.本文用oslo_config 實現一個簡單的命令列工具mycmd.主要實現 "mycmd ls" 和 "mycmd cd".由於目的主要在於介紹oslo_config實現命令列.因此兩個命令並沒有實際功能只是列印.

1. 建立包MyCmd:

# tree
.
├── __init__.py
├── mycmd.py

0 directories, 2 files

其中mycmd.py內容如下:

from oslo_config import cfg
import sys

CONF = cfg.CONF

class MyCommand(object):
    def ls(self):
        print "MyCommand ls"

    def cd(self):
        print "MyCommand cd"

def add_command_parsers(subparsers):
    commond_object = MyCommand()
    parser = subparsers.add_parser('ls',
        help="This is mycmd ls")

    parser.add_argument('-m', '--message')
    parser.add_argument('-a', '--all')
    parser.set_defaults(func=commond_object.ls)

    parser=subparsers.add_parser('cd',
        help="This is mycmd cd")

    parser.add_argument('-m', '--message')
    parser.add_argument('-r', '--directory')
    parser.set_defaults(func=commond_object.cd)

def main():
    command_opt = cfg.SubCommandOpt('mycmd',
                title='MyCmd', handler=add_command_parsers,
                help='My Command')
    CONF.register_cli_opt(command_opt)
    CONF(sys.argv[1:], __name__)
    CONF.mycmd.func()


2. 將包移動到python的site-package下面:/usr/lib/python/site-package/下面

3. 在/usr/bin目錄下實現指令碼mycmd,內容如下:

import sys 

from MyCmd.mycmd import main                                                                                                                    


if __name__ == "__main__":
    sys.exit(main())                                                                                                                                       
                                                                                                                           

4. 使用命令

# mycmd ls
MyCommand ls
# mycmd cd
MyCommand cd