2014-09-01 150 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'] 

注意使用破折號與使用下劃線的。

乾杯!

相關問題