2

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

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

有没有办法访问我可能错过的 OptionParser 中的选项?或者有什么比 OptionParser 更好的选择吗?或者其他解决这个问题的方法?

4

1 回答 1

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. 您可以自己选择 - 或编写完全不同的帮助。

于 2011-09-18T20:08:40.920 回答