使用Ruby OptionParser打印仅一些选项的列表

时间:2011-09-18 18:49:31

标签: ruby command-line-arguments optparse

我的程序有很多命令行选项。但是当我输入--help时,我不想压倒用户。我没有打印出所有选项,而是只列出最重要的选项,在列出--help=full类型时打印其余选项。

但是OptionParser似乎只支持打印整个已定义选项列表。我想编写自己的代码来循环定义的选项并以我的方式打印出来,但OptionParser似乎没有提供任何方法来访问它包含的选项定义。

有没有办法访问我可能错过的OptionParser中的选项?或者是否有一些比OptionParser好的替代品?或者其他一些解决这个问题的方法?

1 个答案:

答案 0 :(得分:3)

您可以根据需要重新定义选项--help

require 'optparse'

#create parsers
opts = OptionParser.new()
opts.banner = "Usage: example.rb [options]"
opts.separator("test optparse with --help[=full]")
opts.on("-v", "--[no-]verbose", "Run verbosely") { |v|
  puts "->Verbose ist #{v.inspect}"
}
opts.on("-r", "--repeat REPEAT", "Repeat REPEAT times") { |v|
  puts "->Repeat ist #{v.inspect}"
}

#Define your own --help
opts.on("-h", "--help [HELP]", "Help") { |v|
  case v
    when 'full' #write original help
      puts opts.help
    when nil, '' #write script specific help
      puts opts.banner 
      opts.summarize([], opts.summary_width ) { |helpline| 
        #make your own decision on each helpline
        #~ puts helpline #puts each line
        puts helpline unless helpline =~ /-v/ #ignore -v
      }
    else
      puts opts.banner 
      puts <<helpmessage
Undefined --help option. Please use 'full' or no option
  #{File.basename(__FILE__)} --help
  #{File.basename(__FILE__)} --help=full
helpmessage
  end
}

opts.parse!

在此版本中,--help显示所有选项,但不显示-v。您可以自己选择 - 或者写一个完整的不同帮助。