首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在RYU应用程序中注册一个新的命令行选项

在RYU应用程序中注册一个新的命令行选项
EN

Stack Overflow用户
提问于 2014-09-01 07:50:47
回答 1查看 1.6K关注 0票数 1

我需要能够从我的simple_switch.py应用程序中读取路径文件,我在simple_switch.py中添加了以下代码。

代码语言:javascript
复制
      LOG = logging.getLogger(__name__)
 CONF = cfg.CONF
 CONF.register_cli_opts([
             cfg.StrOpt('path-file', default='test.txt',
                                              help='path-file')
     ])

我试图按以下方式启动应用程序。

代码语言:javascript
复制
  bin/ryu-manager --observe-links --path-file test.txt ryu/app/simple_switch.py      

但是,我得到了以下错误。

代码语言:javascript
复制
usage: ryu-manager [-h] [--app-lists APP_LISTS] [--ca-certs CA_CERTS]
                   [--config-dir DIR] [--config-file PATH]
                   [--ctl-cert CTL_CERT] [--ctl-privkey CTL_PRIVKEY]
                   [--default-log-level DEFAULT_LOG_LEVEL] [--explicit-drop]
                   [--install-lldp-flow] [--log-config-file LOG_CONFIG_FILE]
                   [--log-dir LOG_DIR] [--log-file LOG_FILE]
                   [--log-file-mode LOG_FILE_MODE]
                   [--neutron-admin-auth-url NEUTRON_ADMIN_AUTH_URL]
                   [--neutron-admin-password NEUTRON_ADMIN_PASSWORD]
                   [--neutron-admin-tenant-name NEUTRON_ADMIN_TENANT_NAME]
                   [--neutron-admin-username NEUTRON_ADMIN_USERNAME]
                   [--neutron-auth-strategy NEUTRON_AUTH_STRATEGY]
                   [--neutron-controller-addr NEUTRON_CONTROLLER_ADDR]
                   [--neutron-url NEUTRON_URL]
                   [--neutron-url-timeout NEUTRON_URL_TIMEOUT]
                   [--noexplicit-drop] [--noinstall-lldp-flow]
                   [--noobserve-links] [--nouse-stderr] [--nouse-syslog]
                   [--noverbose] [--observe-links]
                   [--ofp-listen-host OFP_LISTEN_HOST]
                   [--ofp-ssl-listen-port OFP_SSL_LISTEN_PORT]
                   [--ofp-tcp-listen-port OFP_TCP_LISTEN_PORT] [--use-stderr]
                   [--use-syslog] [--verbose] [--version]
                   [--wsapi-host WSAPI_HOST] [--wsapi-port WSAPI_PORT]
                   [--test-switch-dir TEST-SWITCH_DIR]
                   [--test-switch-target TEST-SWITCH_TARGET]
                   [--test-switch-tester TEST-SWITCH_TESTER]
                   [app [app ...]]
ryu-manager: error: unrecognized arguments: --path-file

看起来,我需要在某个地方注册一个新的命令行选项,然后才能使用it.Can --我要指出的一点是,如何做到这一点?还有人能解释一下如何访问程序中的文件(text.txt)吗?

EN

回答 1

Stack Overflow用户

发布于 2014-09-02 23:20:55

您正处于正确的轨道上,但是您正在创建的CONF条目实际上需要在加载应用程序之前加载,否则ryu-manager无法知道它的存在!

您要查找的文件是flags.py,它位于源树的ryu目录下(或根安装目录下)。

Ryu /test/switch/tester.py Ryu应用程序就是这样定义它自己的参数的,所以您可以使用它作为引用:

代码语言:javascript
复制
CONF.register_cli_opts([
    # tests/switch/tester
    cfg.StrOpt('target', default='0000000000000001', help='target sw dp-id'),
    cfg.StrOpt('tester', default='0000000000000002', help='tester sw dp-id'),
    cfg.StrOpt('dir', default='ryu/tests/switch/of13',
               help='test files directory')
], group='test-switch')

按照这种格式,CONF.register_cli_opts接受一个配置类型数组,与您所做的完全一样(可以使用的不同类型,请参见ryu/cfg.py )。

您会注意到,当您运行ryu-manager帮助时,即

代码语言:javascript
复制
ryu-manager --help

列出的列表按应用程序排序(例如,“测试开关选项”下的参数组)。因此,您需要为您的命令集指定一个组名。

现在让我们假设您使用了组名'my-app‘,并且在这个组中有一个名为'path-file’的参数,命令行参数将是--my-app-path-file (这可能会变得有点长),而您可以像这样在应用程序中访问它:

代码语言:javascript
复制
from ryu import cfg
CONF = cfg.CONF
path_file = CONF['my-app']['path_file']

注意使用破折号与使用下划线。

干杯!

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25601133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档