我需要能够从我的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)吗?
答案 0 :(得分: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
出现的列表按应用程序排序(例如,' test-switch options'下的参数组)。因此,您需要为命令集指定组名。
现在让我们说您使用了群组名称' my-app'并有一个名为' path-file'在该组中,命令行参数将是--my-app-path-file(这可能会有点长),而您可以在应用程序中访问它,如下所示:
from ryu import cfg
CONF = cfg.CONF
path_file = CONF['my-app']['path_file']
请注意使用破折号与使用下划线。
干杯!