1

我需要能够从我的 simple_switch.py​​ 应用程序中读取路径文件。我已将以下代码添加到 python 中的 simple_switch.py​​ 中。

      LOG = logging.getLogger(__name__)
 CONF = cfg.CONF
 CONF.register_cli_opts([
             cfg.StrOpt('path-file', default='test.txt',
                                              help='path-file')
     ])

我尝试按如下方式启动应用程序。

  bin/ryu-manager --observe-links --path-file test.txt ryu/app/simple_switch.py      

但是我收到以下错误。

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

看起来我需要在某个地方注册一个新的命令行选项才能使用它。有人可以指出我该怎么做吗?也有人可以解释如何访问程序中的文件(text.txt)吗?

4

1 回答 1

4

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

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

这就是 ryu/tests/switch/tester.py Ryu 应用程序定义它自己的参数的方式,因此您可以将其用作参考:

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 帮助时,即

ryu-manager --help

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

现在让我们假设您使用了组名“my-app”并在该组中有一个名为“path-file”的参数,命令行参数将是--my-app-path-file(这可以得到一点long),而您可以像这样在应用程序中访问它:

from ryu import cfg
CONF = cfg.CONF
path_file = CONF['my-app']['path_file']

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

干杯!

于 2014-09-02T23:20:55.753 回答