Buscar..


Introducción

OptionParser se puede usar para analizar las opciones de línea de comandos de ARGV .

Opciones de línea de comando obligatorias y opcionales

Es relativamente fácil analizar la línea de comandos a mano si no está buscando algo demasiado complejo:

# 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

Pero cuando sus opciones comienzan a complicarse, probablemente necesitará usar un analizador de opciones como, bueno, 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!

También hay un parse no destructivo, pero es mucho menos útil si planeas usar el resto de lo que está en ARGV .

La clase OptionParser no tiene una manera de imponer argumentos obligatorios (como --site en este caso). Sin embargo, usted puede hacer su propia comprobación después de ejecutar parse! :

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

Para un controlador de opciones obligatorio más genérico, vea esta respuesta . En caso de que no quede claro, todas las opciones son opcionales, a menos que haga un esfuerzo adicional para hacerlas obligatorias.

Valores predeterminados

Con OptionsParser , es muy fácil configurar los valores predeterminados. Simplemente rellene previamente el hash en el que almacena las opciones en:

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

Cuando defina el analizador, sobrescribirá el valor predeterminado si un usuario proporciona un valor:

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

Descripciones largas

A veces tu descripción puede llegar a ser bastante larga. Por ejemplo, irb -h enumera en un argumento que dice:

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

No está claro de inmediato cómo apoyar esto. La mayoría de las soluciones requieren ajustes para que la sangría de la segunda línea y las siguientes se alineen con la primera. Afortunadamente, el método on admite múltiples líneas de descripción al agregarlas como argumentos separados:

  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

Puede agregar tantas líneas de descripción como desee para explicar completamente la opción.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow