2014-09-01 98 views
1

我需要能够从我的simple_switch.py​​应用程序中读取路径文件。我在python中的simple_switch.py​​中添加了以下代码。在RYU应用程序中注册新的命令行选项

 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 

它看起来像我需要在一些地方注册一个新的命令行选项之前,我可以使用it.Can一些,一个点出来给我该怎么做?也有人可以解释如何访问该程序内的文件(text.txt)?

回答

4

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

您正在寻找的文件是flags.py,在源代码树的ryu目录下(或在根安装目录下)。

这是刘某/测试/开关/ tester.py刘某的应用程序是如何定义它自己的论点,所以你可能会使用它作为您的参考:

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 --help 

,来了是按应用分类列表中(例如在“测试开关选项”组参数)。因此,您需要为您的一组命令指定组名。

现在让我们说你使用了组名'my-app',并在该组中有一个名为'path-file'的参数,命令行参数将是--my-app-path-file(this可以得到一点点长),而你可以在你的应用程序中访问这样的:

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

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

干杯!

相关问题