Ruby Language
OptionParser
Recherche…
Introduction
OptionParser peut être utilisé pour analyser les options de ligne de commande à partir d' ARGV
.
Options de ligne de commande obligatoires et facultatives
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.
Les valeurs par défaut
Avec OptionsParser
, il est très facile de définir des valeurs par défaut. Il suffit de pré-remplir le hachage pour stocker les options dans:
options = {
:directory => ENV['HOME']
}
Lorsque vous définissez l'analyseur, il remplace le paramètre par défaut si un utilisateur fournit une valeur:
OptionParser.new do |opts|
opts.on("-d", "--directory HOME", "Directory to use") do |d|
options[:directory] = d
end
end
Longues descriptions
Parfois, votre description peut être assez longue. Par exemple irb -h
répertorie l'argument qui se lit comme suit:
--context-mode n Set n[0-3] to method to create Binding Object,
when new workspace was created
Ce n'est pas immédiatement clair comment soutenir cela. La plupart des solutions nécessitent un ajustement pour que l'indentation des deuxièmes lignes et des lignes suivantes s'aligne sur la première. Heureusement, la on
méthode prend en charge de multiples lignes de description en les ajoutant comme arguments séparés:
opts.on("--context-mode n",
"Set n[0-3] to method to create Binding Object,",
"when new workspace was created") do |n|
optons[:context_mode] = n
end
Vous pouvez ajouter autant de lignes de description que vous le souhaitez pour expliquer pleinement l’option.