2014-09-01 2 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 
내가 그렇게하는 방법을 나에게 어떤-한 점을 잊었 사용하기 전에 어딘가에 새로운 명령 줄 옵션을 등록해야처럼 보이 않습니다

? 또한 누군가 프로그램에서 파일 (text.txt)에 액세스하는 방법을 설명 할 수 있습니까?

답변

4

제대로 된 것입니다 만, 실제로 작성중인 CONF 항목에 이로드되어야합니다. 앱이로드되기 전에 그렇지 않으면 ryu-manager가 존재한다는 것을 알 수 없습니다!

소스 트리의 ryu 디렉토리 (또는 루트 설치 디렉토리) 아래에서 찾고있는 파일은 flags.py입니다.

이는 류/테스트/스위치/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이됩니다.

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

주에게 대시의 사용을 밑줄의 사용 대 :이 같은 응용 프로그램에 액세스 할 수 있지만,) 약간 긴를 얻을 수 있습니다.

건배!

관련 문제