引数の解析
Ryuではoslo.configというモジュールを用いて引数の解析を行っています。manager.pyの該当ソースコードを一部抜粋修正しました。
#test-config.py from ryu import cfg import sys from ryu import version CONF = cfg.CONF CONF.register_cli_opts([ cfg.ListOpt('app_lists', default=[], help='application module name to run'), cfg.MultiStrOpt('app', positional=True, default=[], help='application module name to run') ]) def main(args=None, prog=None): try: CONF(args=args, prog=prog, project='ryu', version='ryu-manager %s' % version, default_config_files=['/usr/local/etc/ryu/ryu.conf']) except cfg.ConfigFilesNotFoundError: CONF(args=args, prog=prog, project='ryu', version='ryu-manager %s' % version) print 'CONF.app_list: %s' % (CONF.app_lists, ) print 'CONF.app: %s' % (CONF.app, ) main()
以下に実行例とその結果を記載ました。oslo.configのListとMultiStrの違いが分かります。
#オプションを指定しない場合はappに引数が格納される。 $ python test-config.py test CONF.app_list: [] CONF.app: ['test'] #オプションを指定せずに引数を複数個指定した場合は、同一の要素として扱われる。 $ python test-config.py test1,test2 CONF.app_list: [] CONF.app: ['test1,test2'] #オプションにapp_listsを指定した場合は、app_listsに引数が格納される。 $ python test-config.py --app_lists test CONF.app_list: ['test'] CONF.app: [] #オプションにapp_listsを指定して引数を複数個指定した場合は、別の要素として扱われる。 $ python test-config.py --app_lists test,test2 CONF.app_list: ['test', 'test2'] CONF.app: [] #ヘルプコマンドの実施 $ python test-config.py -h usage: test-config.py [-h] [--app_lists APP_LISTS] [--config-dir DIR] [--config-file PATH] [--version] [app [app ...]]