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ę.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow