Ruby Language Options de ligne de commande obligatoires et facultatives


Exemple

Il est relativement facile d'analyser la ligne de commande à la main si vous ne recherchez rien de trop complexe:

# Naive error checking
abort('Usage: ' + $0 + ' site id ...') unless ARGV.length >= 2

# First item (site) is mandatory
site = ARGV.shift

ARGV.each do | id |
  # Do something interesting with each of the ids
end

Mais lorsque vos options commenceront à se compliquer, vous devrez probablement utiliser un analyseur d'options tel que OptionParser :

require 'optparse'

# The actual options will be stored in this hash
options = {}

# Set up the options you are looking for
optparse = OptionParser.new do |opts|
  opts.banner = "Usage: #{$0} -s NAME id ..."

  opts.on("-s", "--site NAME", "Site name") do |s|
    options[:site] = s
  end

  opts.on( '-h', '--help', 'Display this screen' ) do
    puts opts
    exit
  end
end

# The parse! method also removes any options it finds from ARGV.
optparse.parse!

Il y a aussi une parse non destructive, mais c'est beaucoup moins utile si vous prévoyez d'utiliser le reste de ce que ARGV .

La classe OptionParser ne dispose d'aucun moyen pour appliquer des arguments obligatoires (tels que --site dans ce cas). Cependant, vous pouvez faire votre propre vérification après avoir exécuté l' parse! :

# Slightly more sophisticated error checking
if options[:site].nil? or ARGV.length == 0
  abort(optparse.help)
end

Pour un gestionnaire d'options obligatoire plus générique, consultez cette réponse . Au cas où ce ne serait pas clair, toutes les options sont facultatives, à moins que vous ne fassiez le maximum pour les rendre obligatoires.