1

我有几个 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. 你对我如何让解析器存储所有参数有什么建议吗?

问候,
迈克

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

4

1 回答 1

1

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

class NagiosCheck
  def generate_options (*args)
     GetoptLong.new(*args)
  end
end
于 2011-05-25T14:47:44.690 回答