我需要能够从我的simple_switch.py应用程序中读取路径文件,我在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看起来,我需要在某个地方注册一个新的命令行选项,然后才能使用it.Can --我要指出的一点是,如何做到这一点?还有人能解释一下如何访问程序中的文件(text.txt)吗?
发布于 2014-09-02 23:20:55
您正处于正确的轨道上,但是您正在创建的CONF条目实际上需要在加载应用程序之前加载,否则ryu-manager无法知道它的存在!
您要查找的文件是flags.py,它位于源树的ryu目录下(或根安装目录下)。
Ryu /test/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 (这可能会变得有点长),而您可以像这样在应用程序中访问它:
from ryu import cfg
CONF = cfg.CONF
path_file = CONF['my-app']['path_file']注意使用破折号与使用下划线。
干杯!
https://stackoverflow.com/questions/25601133
复制相似问题