如何使用带变量选项的getoptlong?

时间:2011-05-25 14:02:27

标签: ruby nagios

我有几个Nagios脚本继承了一个常见的NagiosCheck类。由于每个检查都有略微不同的getopts选项,我认为通过NagiosCheck类方法生成可用选项是最好的。但是我被卡住了......

这就是我调用方法的方法:

class CheckFoobar < NagiosCheck
  ...
end

check = CheckFoobar.new
check.generate_options(
  ['-H', '--hostname', GetoptLong::REQUIRED_ARGUMENT],
  ['-P', '--port', GetoptLong::REQUIRED_ARGUMENT],
  ['-u', '--url', GetoptLong::REQUIRED_ARGUMENT])

方法本身:

class NagiosCheck
  ...
  def generate_options (*args)
    options = []

    args.each do |arg|
      options << arg
    end

    parser = GetoptLong.new
    options.each {|arg| parser.set_options(arg)}
  end
end

然后解析器只存储最后一项:

p parser # => #<GetoptLong:0x00000000e17dc8 @ordering=1, @canonical_names={"-u"=>"-u", "--url"=>"-u"}, @argument_flags={"-u"=>1, "--url"=>1}, @quiet=false, @status=0, @error=nil, @error_message=nil, @rest_singles="", @non_option_arguments=[]>
  1. 您对我如何让解析器存储所有参数有任何建议吗?
  2. 的问候,
    麦克

    ...关于stackoverflow的第一个问题。如果我做错了请告诉我,让我知道,以便我能够适应。

1 个答案:

答案 0 :(得分:1)

generate_options方法太复杂了。 Getoptlong.new将数组数组作为参数。

class NagiosCheck
  def generate_options (*args)
     GetoptLong.new(*args)
  end
end