我在Ruby中使用OptionParser
。
我其他语言如C,Python等,有类似的命令行参数解析器,它们通常提供一种在没有提供参数或参数错误时显示帮助消息的方法。
options = {}
OptionParser.new do |opts|
opts.banner = "Usage: calc.rb [options]"
opts.on("-l", "--length L", Integer, "Length") { |l| options[:length] = l }
opts.on("-w", "--width W", Integer, "Width") { |w| options[:width] = w }
opts.on_tail("-h", "--help", "Show this message") do
puts opts
exit
end
end.parse!
问题:
help
),有没有办法设置默认显示ruby calc.rb
消息?length
是一个REQUIRED参数,用户没有传递它或传递错误,如-l FOO
?答案 0 :(得分:34)
只需将 -h 键添加到 ARGV ,当它为空时,您可以执行以下操作:
require 'optparse'
ARGV << '-h' if ARGV.empty?
options = {}
OptionParser.new do |opts|
opts.banner = "Usage: calc.rb [options]"
opts.on("-l", "--length L", Integer, "Length") { |l| options[:length] = l }
opts.on("-w", "--width W", Integer, "Width") { |w| options[:width] = w }
opts.on_tail("-h", "--help", "Show this message") do
puts opts
exit
end
end.parse!
答案 1 :(得分:0)
我的脚本正好需要 2 个参数,因此我在解析后使用此代码检查 ARGV.length
:
if ARGV.length != 2 then
puts optparse.help
exit 1
end
答案 2 :(得分:-2)
您可以在解析之前检查ARGV(如上面的答案):
ARGV << '-h' if ARGV.empty?
或者在解析后检查你的选项哈希:
if @options.empty?
puts optparse.help
puts 'At least 1 argument should be supplied!'
end
我这样做是为了确保使用OptionParse的强制args(找不到任何内置功能):
begin
optparse.parse!
mandatory = [:length, :width] # Enforce the presence of
missing = mandatory.select{ |param| @options[param].nil? } # mandatory switches: :length, :width
if not missing.empty? #
puts "Missing options: #{missing.join(', ')}" #
puts optparse.help #
exit 2 #
end #
rescue OptionParser::InvalidOption, OptionParser::MissingArgument => error #
puts error # Friendly output when parsing fails
puts optparse #
exit 2 #
end