我正在开发ryu应用程序。该应用程序基本上是一个 python 脚本。ryu 应用程序由 ryu-manager 像这样调用
ryu-manager {文件名}
ryu-manager 采用某些参数。我想知道是否有一种方法可以将参数传递给我的文件?
用于解析命令行选项的 python 的argparse模块在那里,但我不确定它是否会工作,因为我提供的所有参数都由 ryu-manager 使用,而不是我的脚本。
任何帮助,将不胜感激。
我正在开发ryu应用程序。该应用程序基本上是一个 python 脚本。ryu 应用程序由 ryu-manager 像这样调用
ryu-manager {文件名}
ryu-manager 采用某些参数。我想知道是否有一种方法可以将参数传递给我的文件?
用于解析命令行选项的 python 的argparse模块在那里,但我不确定它是否会工作,因为我提供的所有参数都由 ryu-manager 使用,而不是我的脚本。
任何帮助,将不胜感激。
我没有尝试过,但是:
“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…]
这样做是一个 4 步过程。我将展示一个示例,您可以在其中读取参数然后打印它们,但是您可以将它们分配给变量或通过引用此过程来做任何您想做的事情。
创建一个 .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
将以下代码添加到您的 __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))
运行脚本
ryu-manager paramtest.py --config-file [PATH/TO/FILE/params.conf]
利润
我在整理答案时参考了以下内容,它们可以提供更多详细信息(例如 oslo.config 的东西,在遇到此问题之前我从未听说过)。
有关 oslo.config 的更多信息:http ://www.giantflyingsaucer.com/blog/?p=4822
关于这个问题的 Ryu 电子邮件链:https ://sourceforge.net/p/ryu/mailman/message/33410077/
我还没有找到将参数传递给 ryu 控制器的方法。我用来解决这个问题的一种方法是将参数作为环境变量传递。例如,我有一个调用 ryu-manager 并需要将参数传递给应用程序的程序。我这样做如下: ARG=value ryu-manager app.py