我正在开发ryu应用。该应用程序基本上是一个python脚本。 ryu应用程序由ryu-manager调用,如此
ryu-manager {filename}
ryu-manager有一些参数。我想知道是否有办法将参数传递给我的文件?
用于解析命令行选项的python的{p> argparse模块是存在但不确定它是否会起作用,因为我提供的所有参数都由ryu-manager使用而不是我的脚本。任何帮助都将不胜感激。
答案 0 :(得分:3)
我没试过,但是:
“Ryu目前使用oslo.config.cfg进行命令行解析。 (柳/了contrib /奥斯陆/配置)。 树中有几个例子。柳/应用/ 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…]
答案 1 :(得分:1)
这样做分为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/
答案 2 :(得分:0)
我还没有找到一种方法将参数传递给ryu控制器。我用来解决这个问题的一种方法是将参数作为环境变量传递。例如,我有一个调用ryu-manager的程序,需要将参数传递给app。我这样做如下:ARG=value ryu-manager app.py