我的程序有很多命令行选项。但是当我输入--help
时,我不想压倒用户。我没有打印出所有选项,而是只列出最重要的选项,在列出--help=full
类型时打印其余选项。
但是OptionParser似乎只支持打印整个已定义选项列表。我想编写自己的代码来循环定义的选项并以我的方式打印出来,但OptionParser似乎没有提供任何方法来访问它包含的选项定义。
有没有办法访问我可能错过的OptionParser中的选项?或者是否有一些比OptionParser好的替代品?或者其他一些解决这个问题的方法?
答案 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
。您可以自己选择 - 或者写一个完整的不同帮助。