Поиск…


Вступление

OptionParser можно использовать для анализа параметров командной строки из ARGV .

Обязательные и необязательные параметры командной строки

Сравнительно легко разобрать командную строку вручную, если вы не ищете слишком сложного:

# 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

Но когда ваши параметры начинают усложняться, вам, вероятно, понадобится использовать парсер параметров, например, 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!

Существует также неразрушающий parse , но он намного менее полезен, если вы планируете использовать оставшуюся часть того, что находится в ARGV .

Класс OptionParser не имеет возможности принудительно --site обязательные аргументы (например, --site в этом случае). Однако вы можете выполнить проверку после выполнения parse! :

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

Для получения более общего обязательного обработчика опций см. Этот ответ . Если это неясно, все опции являются необязательными, если вы не сделаете так, чтобы сделать их обязательными.

Значения по умолчанию

С помощью OptionsParser очень просто настроить значения по умолчанию. Просто предварительно заполнив хэш, вы сохраняете параметры в:

options = {
  :directory => ENV['HOME']
}

Когда вы определяете парсер, он будет перезаписывать значение по умолчанию, если пользователь предоставит значение:

OptionParser.new do |opts|
  opts.on("-d", "--directory HOME", "Directory to use") do |d|
    options[:directory] = d
  end
end

Длинные описания

Иногда ваше описание может длиться довольно долго. Например, irb -h перечисляет аргумент, который гласит:

  --context-mode n  Set n[0-3] to method to create Binding Object,
                    when new workspace was created

Не сразу понятно, как это поддерживать. Большинство решений требуют регулировки, чтобы отступы второй и последующих линий совпадали с первой. К счастью, метод on поддерживает несколько строк описания, добавляя их в виде отдельных аргументов:

  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

Вы можете добавить столько строк описания, сколько хотите, чтобы полностью объяснить эту опцию.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow