¿Quieres aprender a usar OptionParser para analizar comandos en Ruby?

En el artículo que discute las características de OptionParser, discutimos algunas de las razones que hacen que el uso de OptionParser en Ruby sea preferible a mirar a través de ARGV manualmente para analizar los comandos a mano. Ahora es el momento de aprender a usar OptionParser y sus funciones.

 

El siguiente código de placa de caldera se utilizará para todos los ejemplos de este tutorial. Para probar cualquiera de los ejemplos, simplemente ponga el bloque opts.on del ejemplo junto al comentario TODO.

Al ejecutar el programa se imprimirá el estado de las opciones tiene y ARGV, lo que le permitirá examinar los efectos de sus conmutadores.

#!/usr/bin/env ruby

require 'optparse'

require 'pp'

 

# This hash will hold all of the options

# parsed from the command-line by

# OptionParser.

options = {}

 

optparse = OptionParser.new do|opts|

  # TODO: Put command-line options here

 

  # This displays the help screen, all programs are

  # assumed to have this option.

  opts.on( '-h', '--help', 'Display this screen' ) do

    puts opts

    exit

  end

end

 

# Parse the command-line. Remember there are two forms

# of the parse method. The 'parse' method simply parses

# ARGV, while the 'parse!' method parses ARGV and removes

# any options found there, as well as any parameters for

# the options. What's left is the list of files to resize.

optparse.parse!

 

pp "Options:", options

pp "ARGV:", ARGV

Interruptor simple

Un simple cambio es un argumento sin formularios opcionales o sin parámetros.

 

El efecto será simplemente establecer una bandera en el hash de opciones. No se pasará ningún otro parámetro al método on.

 

options[:simple] = false

opts.on( '-s', '--simple', "Simple argument" ) do

  options[:simple] = true

end

 

Conmutador con parámetro obligatorio

Los conmutadores que toman un parámetro sólo necesitan indicar el nombre del parámetro en la forma larga del conmutador.

 

Por ejemplo, "-f", "--file FILE" significa que el conmutador -f o --file toma un único parámetro llamado FILE, y este parámetro es obligatorio. No se puede usar ni -f ni --file sin pasarle también un parámetro.

options[:mand] = ""

opts.on( '-m', '--mandatory FILE', "Mandatory argument" ) do|f|

  options[:mand] = f

end

 

Interruptor con parámetro opcional

Los parámetros de conmutación no tienen que ser obligatorios, pueden ser opcionales. Para declarar opcional un parámetro de conmutador, coloque su nombre entre paréntesis en la descripción del conmutador. Por ejemplo, "--logfile[FILE]" significa que el parámetro FILE es opcional. Si no se suministra, el programa asumirá un valor predeterminado razonable, como un archivo llamado log.txt.

 

En el ejemplo, se utiliza el idioma a = b || c. Esto es sólo la abreviatura de "a = b, pero si b es falso o nulo, a = c".

options[:opt] = false

opts.on( '-o', '--optional [OPT]', "Optional argument" ) do|f|

  options[:opt] = f || "nothing"

end

 

Convertir automáticamente a flotante

OptionParser puede convertir automáticamente los argumentos a algunos tipos. Uno de estos tipos es Float. Para convertir automáticamente sus argumentos en un interruptor a Float, pase Float al método on después de las cadenas de descripción de su interruptor.

 

Las conversiones automáticas son prácticas. No sólo le guardan el paso de convertir la cadena al tipo deseado, sino que también comprueban el formato por usted y lanzan una excepción si está formateada incorrectamente.

options[:float] = 0.0

opts.on( '-f', '--float NUM', Float, "Convert to float" ) do|f|

  options[:float] = f

end

 

Algunos otros tipos que OptionParser puede convertir para incluir automáticamente Tiempo y Entero.

 

Listas de argumentos

Los argumentos pueden interpretarse como listas. Esto puede ser visto como una conversión a una matriz, al igual que la conversión a Flotador. Mientras que la cadena de opciones puede definir el parámetro que se llamará "a,b,c", OptionParser permitirá ciegamente cualquier número de elementos en la lista. Por lo tanto, si necesita un número específico de elementos, asegúrese de comprobar la longitud del array usted mismo.

 

options[:list] = []

opts.on( '-l', '--list a,b,c', Array, "List of parameters" ) do|l|

  options[:list] = l

end

Conjunto de argumentos

A veces tiene sentido restringir los argumentos a un cambio a unas pocas opciones. Por ejemplo, el siguiente conmutador sólo tomará un único parámetro obligatorio, y el parámetro debe ser uno de sí, no o quizás.

 

Si el parámetro es cualquier otra cosa, se lanzará una excepción.

 

Para hacer esto, pase una lista de parámetros aceptables como símbolos después de las cadenas de descipción del interruptor.

 

options[:set] = :yes

opts.on( '-s', '--set OPT', [:yes, :no, :maybe], "Parameters from a set" ) do|s|

  options[:set] = s

end

Formas negadas

Los interruptores pueden tener una forma negada. El interruptor --negado puede tener uno que haga el efecto contrario, llamado --no-negado. Para describir esto en la cadena de descripción del interruptor, coloque la parte alternativa entre paréntesis: --[no]negado. Si se encuentra el primer formulario, true se pasará al bloque, y false se bloqueará si se encuentra el segundo formulario.

 

options[:neg] = false

opts.on( '-n', '--[no-]negated', "Negated forms" ) do|n|

  options[:neg] = n

end

(0 votes)