Array

La línea de comandos de análisis optimiza la forma Ruby (OptionParser)

Cloud computing desk

Ruby viene equipado con una herramienta potente y flexible para analizar las opciones de línea de comandos, OptionParser. Una vez que aprenda a usar esto, usted y amp; apos; nunca volverán a mirar a través de ARGV manualmente. OptionParser tiene una serie de características que lo hacen bastante atractivo para los programadores de Ruby. Si usted y amp; apos; alguna vez han analizado las opciones a mano en Ruby o C, o con la función getoptlong C, usted y amp; apos; veré cuán bienvenidos son algunos de estos cambios.

  • OptionParser está SECO. Solo tiene que escribir el interruptor de línea de comandos, sus argumentos, el código que se ejecutará cuando se encuentre con él y la descripción del interruptor de línea de comandos una vez en su script.OptionParser generará automáticamente pantallas de ayuda para usted a partir de esta descripción, así como inferirá todo sobre el argumento a partir de su descripción. Por ejemplo, sabrá que la opción –file [FILE] es opcional y toma un solo argumento. Además, sabrá que – [-no] -verbose es realmente dos opciones y aceptará ambos formularios.
  • OptionParser convertirá automáticamente las opciones a una clase específica. Si la opción toma un número entero, puede convertir cualquier cadena pasada en la línea de comandos en un número entero. Esto reduce parte del tedio involucrado en el análisis de las opciones de línea de comandos.
  • Todo está muy contenido. Todas las opciones están en el mismo lugar, y el efecto de la opción está en el lado derecho de la definición de la opción. Si hay que agregar opciones, cambiarlas o alguien simplemente quiere ver lo que hacen, solo hay un lugar para buscar. Una vez que se analiza la línea de comandos, un solo Hash u OpenStruct retendrá los resultados.
  • Video destacado

Ya es suficiente, muéstrame algún código

Así que aquí y amp; apos; s un ejemplo simple de cómo usar OptionParser . No utiliza ninguna de las características avanzadas, solo lo básico. Hay tres opciones, y una de ellas toma un parámetro. Todas las opciones son obligatorias. Existen las opciones -v / – verbose y -q / – quick , así como la opción -l / – logfile FILE . Además, el script toma una lista de archivos independientes de las opciones.

& lt; pre / & gt; & lt; pre & gt; #!/ usr / bin / env ruby & lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; # Un script que pretenderá cambiar el tamaño de varias imágenes & lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; require & amp; apos; optparse & amp; apos; & lt; / pre & gt ;
& lt; br & gt ;
& lt; br & gt ;
& lt; pre & gt; # Este hash tendrá todas las opciones & lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; # analizado desde la línea de comandos por & lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; # OptionParser.& lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; opciones = {} & lt; / pre & gt ;
& lt; br & gt ;
& lt; br & gt ;
& lt; pre & gt; optparse = OptionParser.new do | opts | & lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; & amp; amp; nbsp; & amp; amp; nbsp; # Establezca un banner, que se muestra en la parte superior & lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; & amp; amp; nbsp; & amp; amp; nbsp; # de la pantalla de ayuda.& lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; & amp; amp; nbsp; & amp; amp; nbsp; opts.banner = & amp; quot; Uso: optparse1.rb [opciones] file1 file2 …& amp; quot; & lt; / pre & gt ;
& lt; br & gt ;
& lt; br & gt ;
& lt; pre & gt; & amp; amp; nbsp; & amp; amp; nbsp; # Defina las opciones y lo que hacen & lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; & amp; amp; nbsp; & amp; amp; nbsp; options [: verbose] = false & lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; & amp; amp; nbsp; & amp; amp; nbsp; opts.on (& amp; apos; -v & amp; apos;, & amp; apos; – verbose & amp; apos;, & amp; apos; Output más información & amp; apos;) do & lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; options [: verbose] = true & lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; & amp; amp; nbsp; & amp; amp; nbsp; end & lt; / pre & gt ;
& lt; br & gt ;
& lt; br & gt ;
& lt; pre & gt; & amp; amp; nbsp; & amp; amp; nbsp; options [: quick] = false & lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; & amp; amp; nbsp; & amp; amp; nbsp; opts.on (& amp; apos; -q & amp; apos;, & amp; apos; – quick & amp; apos;, & amp; apos; Realizar la tarea rápidamente & amp; apos;) do & lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; options [: quick] = true & lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; & amp; amp; nbsp; & amp; amp; nbsp; end & lt; / pre & gt ;
& lt; br & gt ;
& lt; br & gt ;
& lt; pre & gt; & amp; amp; nbsp; & amp; amp; nbsp; options [: logfile] = nil & lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; & amp; amp; nbsp; & amp; amp; nbsp; opts.on (& amp; apos; -l & amp; apos;, & amp; apos; – logfile FILE & amp; apos;, & amp; apos; Write log to FILE & amp; apos;) do | fille | & lt; & lt; & lt;
& lt; br & gt ;
& lt; pre & gt; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; options [: logfile] = file & lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; & amp; amp; nbsp; & amp; amp; nbsp; end & lt; / pre & gt ;
& lt; br & gt ;
& lt; br & gt ;
& lt; pre & gt; & amp; amp; nbsp; & amp; amp; nbsp; # Esto muestra la pantalla de ayuda, todos los programas son & lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; & amp; amp; nbsp; & amp; amp; nbsp; # se supone que tiene esta opción.& lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; & amp; amp; nbsp; & amp; amp; nbsp; opts.on (& amp; apos; -h & amp; apos;, & amp; apos; – help & amp; apos;, & amp; apos; Display esta pantalla & amp; apos;) do & lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; puts opts & lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; exit & lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; & amp; amp; nbsp; & amp; amp; nbsp; end & lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; final & lt; / pre & gt ;
& lt; br & gt ;
& lt; br & gt ;
& lt; pre & gt; # Analizar la línea de comandos. Recuerde que hay dos formas & lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; # del método de análisis. The & amp; apos; parse & amp; apos; método simplemente parses & lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; # ARGV, mientras que el & amp; apos; parse!& amp; apos; el método analiza ARGV y elimina & lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; # cualquier opción encontrada allí, así como cualquier parámetro para & lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; # las opciones. Lo que queda de Apos es la lista de archivos para cambiar el tamaño.& lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; optparse.parse!& lt; / pre & gt ;
& lt; br & gt ;
& lt; br & gt ;
& lt; pre & gt; put & amp; quot; Ser verboso & amp; quot; si opciones [: verbose] & lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; put & amp; quot; Ser rápido & amp; quot; si opciones [: rápido] & lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; put & amp; quot; Registro para archivar # {opciones [: archivo de registro]} & amp; quot; si opciones [: archivo de registro] & lt; / pre & gt ;
& lt; br & gt ;
& lt; br & gt ;
& lt; pre & gt; ARGV.each do | f | & lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; & amp; amp; nbsp; & amp; amp; nbsp; puts & amp; quot; Imagen de tamaño # {f}…& amp; quot; & lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; & amp; amp; nbsp; & amp; amp; nbsp; sleep 0.5 & lt; / pre & gt ;
& lt; br & gt ;
& lt; pre & gt; final & lt; / pre & gt ;

Examinando el Código

Para comenzar, se requiere la biblioteca optparse . Recuerde, esto es una joya. Viene con Ruby, por lo que no es necesario instalar una gema o exigir rubigemas antes optparse .

Hay dos objetos interesantes en este guión. La primera es opciones , declaradas en el alcance superior. Es un simple hash vacío. Cuando se definen las opciones, escriben sus valores predeterminados en este hash. Por ejemplo, el comportamiento predeterminado es que este script no sea verboso, por lo que las opciones [: verbose] se establecen en falso. Cuando se encuentran opciones en la línea de comandos, ellos & amp; apos; ll cambian los valores en las opciones para reflejar su efecto. Por ejemplo, cuando se encuentra -v / – verbose , asignará verdadero a opciones [: verbose] .

El segundo objeto interesante es optparse . Este es el objeto OptionParser en sí. Cuando construyes este objeto, lo pasas un bloque. Este bloque se ejecuta durante la construcción y creará una lista de opciones en las estructuras de datos internas y se preparará para analizar todo. Es & amp; apos; s en este bloque que sucede toda la magia. Define todas las opciones aquí.

Opciones de definición

Cada opción sigue el mismo patrón. Primero escribe el valor predeterminado en el hash. Esto sucederá tan pronto como se construya el OptionParser . A continuación, llama al método on , que define la opción en sí. Hay varias formas de este método, pero solo una se usa aquí. Las otras formas le permiten definir conversiones de tipo automáticas y conjuntos de valores a los que está restringida una opción. Los tres argumentos utilizados aquí son la forma corta, la forma larga y la descripción de la opción.

El método on inferirá una serie de cosas de la forma larga. Una cosa es inferir es la presencia de cualquier parámetro. Si hay algún parámetro presente en la opción, los pasará como parámetros al bloque.

Si la opción se encuentra en la línea de comandos, se ejecuta el bloque pasado al método on . Aquí, los bloques don & amp; apos; t hacen mucho, solo establecen valores en el hash de opciones. Se podría hacer más, como verificar que exista un archivo mencionado, etc. Si hay algún error, se pueden lanzar excepciones desde estos bloques.

Finalmente, se analiza la línea de comandos. Esto sucede llamando al análisis ! método en un objeto OptionParser . En realidad, hay dos formas de este método, parse y parse! . Como implica la versión con el signo de exclamación, es destructivo. No solo analiza la línea de comandos, sino que eliminará cualquier opción encontrada de ARGV . Esto es algo importante, dejará solo la lista de archivos suministrados después de las opciones en ARGV .

& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& lt; / br & gt ;
& amp; # x203A; Informática

Dejar respuesta

Please enter your comment!
Please enter your name here

FOLLOW US

Related Stories