Ruby Language
OptionParser
Szukaj…
Wprowadzenie
OptionParser może być używany do analizowania opcji wiersza poleceń z ARGV
.
Obowiązkowe i opcjonalne opcje wiersza poleceń
Względnie łatwo jest ręcznie parsować wiersz poleceń, jeśli nie szukasz niczego zbyt złożonego:
# 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
Ale gdy opcje zaczną się komplikować, prawdopodobnie będziesz musiał użyć parsera opcji, takiego jak 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!
Istnieje również parse
nieniszcząca, ale jest o wiele mniej przydatna, jeśli planujesz wykorzystać resztę zawartości ARGV
.
Klasa OptionParser nie ma sposobu na wymuszanie obowiązkowych argumentów (w tym przypadku --site
). Jednak możesz wykonać własne sprawdzanie po uruchomieniu parse!
:
# Slightly more sophisticated error checking
if options[:site].nil? or ARGV.length == 0
abort(optparse.help)
end
Bardziej ogólny obowiązkowy moduł obsługi opcji znajduje się w tej odpowiedzi . W przypadku, gdy nie jest to jasne, wszystkie opcje są opcjonalne, chyba że robisz wszystko, aby uczynić je obowiązkowymi.
Wartości domyślne
Dzięki OptionsParser
bardzo łatwo jest ustawić wartości domyślne. Po prostu wstępnie wypełnij skrót, w którym przechowujesz opcje:
options = {
:directory => ENV['HOME']
}
Podczas definiowania analizatora składni zastąpi on ustawienie domyślne, jeśli użytkownik poda wartość:
OptionParser.new do |opts|
opts.on("-d", "--directory HOME", "Directory to use") do |d|
options[:directory] = d
end
end
Długie opisy
Czasami twój opis może być dość długi. Na przykład irb -h
wyświetla listę argumentów o treści:
--context-mode n Set n[0-3] to method to create Binding Object,
when new workspace was created
Nie jest od razu jasne, jak to wesprzeć. Większość rozwiązań wymaga dostosowania w celu wyrównania wcięcia drugiej i kolejnych linii do pierwszej. Na szczęście metoda on
obsługuje wiele wierszy opisu, dodając je jako osobne argumenty:
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
Możesz dodać tyle wierszy opisu, ile chcesz, aby w pełni wyjaśnić tę opcję.