【问题标题】:Passing own arguments to ryu proxy app将自己的参数传递给 ryu 代理应用程序
【发布时间】:2013-07-02 11:52:30
【问题描述】:

我正在开发ryu 应用程序。该应用程序基本上是一个 python 脚本。 ryu 应用程序由 ryu-manager 像这样调用

ryu-manager {文件名}

ryu-manager 采用某些参数。我想知道是否有一种方法可以将参数传递给我的文件?

argparse python 解析命令行选项的模块在那里,但我不确定它是否会工作,因为我提供的所有参数都被 ryu-manager 使用,而不是我的脚本。

任何帮助将不胜感激。

【问题讨论】:

    标签: python open-source command-line-arguments


    【解决方案1】:

    我没试过,但是:

    "Ryu 当前使用 oslo.config.cfg 进行命令行解析。 (ryu/contrib/oslo/config)。 树中有几个例子。 ryu/app/tunnel_port_updater.py"

    来自 http://comments.gmane.org/gmane.network.ryu.devel/2709

    另见 https://github.com/osrg/ryu/blob/master/ryu/app/tunnel_port_updater.py

    Ryu 的“入门”页面只是建议:

    ryu-manager [--flagfile <path to configuration file>] [generic/application specific options…]

    http://www.osrg.net/ryu/_sources/getting_started.txt

    【讨论】:

    • 这不会起作用,因为应用程序中的所有示例都是使用调用应用程序时未从命令行初始化的配置选项提供的。
    【解决方案2】:

    这样做是一个 4 步过程。我将展示一个示例,您可以读取参数然后打印它们,但是您可以将它们分配给变量或通过引用此过程来做任何您想做的事情。


    1. 创建一个 .conf 文件(例如 params.conf)

      #Example Conf File
      
      [DEFAULT]
      
      param1_int = 42
      param2_str = "You read my data :)"
      param3_list = 1,2,3
      param4_float = 3.14
      
    2. 将以下代码添加到您的 __init__ 方法中。我对ryu附带的simple_switch_13.py做了这个:

      from ryu import cfg
      :
      :
      class SimpleSwitch13(app_manager.RyuApp):
          def __init__(self, *args, **kwargs):
              super(SimpleSwitch13, self).__init__(*args, **kwargs)
                 :
              CONF = cfg.CONF
              CONF.register_opts([
                  cfg.IntOpt('param1_int', default=0, help = ('The ultimate answer')),
                  cfg.StrOpt('param2_str', default='default', help = ('A string')),
                  cfg.ListOpt('param3_list', default = None, help = ('A list of numbers')),
                  cfg.FloatOpt('param4_float', default = 0.0, help = ('Pi? Yummy.'))])
      
              print 'param1_int = {}'.format(CONF.param1_int))
              print 'param2_str = {}'.format(CONF.param2_str))
              print 'param3_list = {}'.format(CONF.param3_list))
              print 'param4_float = {}'.format(CONF.param4_float))
      
    3. 运行脚本

      ryu-manager paramtest.py --config-file [PATH/TO/FILE/params.conf]
      
    4. 利润


    我在整理答案时参考了以下内容,它们可以提供更多详细信息(例如 oslo.config 内容,在遇到此问题之前我从未听说过)。

    更多关于 oslo.config 的信息:http://www.giantflyingsaucer.com/blog/?p=4822

    关于这个问题的 Ryu 邮件链:https://sourceforge.net/p/ryu/mailman/message/33410077/

    【讨论】:

      【解决方案3】:

      我还没有找到将参数传递给 ryu 控制器的方法。我用来解决这个问题的一种方法是将参数作为环境变量传递。例如,我有一个调用 ryu-manager 并需要将参数传递给应用程序的程序。我这样做如下:ARG=value ryu-manager app.py

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-24
        • 1970-01-01
        • 2015-09-05
        • 2021-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-09
        相关资源
        最近更新 更多