2012-02-02 13 views

Respuesta

8

Para manejar parámetros posicionales utilizando OptionParser, primero analiza los interruptores usando OptionParser y después buscar los argumentos posicionales restantes de ARGV:

# optparse-positional-arguments.rb 
require 'optparse' 

options = {} 
OptionParser.new do |opts| 
    opts.banner = "Usage: #{__FILE__} [command] [options]" 

    opts.on("-v", "--verbose", "Run verbosely") do |v| 
    options[:verbose] = true 
    end 

    opts.on("--list x,y,z", Array, "Just a list of arguments") do |list| 
    options[:list] = list 
    end 
end.parse! 

Al ejecutar la secuencia de comandos:

$ ruby optparse-positional-arguments.rb foobar --verbose --list 1,2,3,4,5 

p options 
# => {:verbose=>true, :list=>["1", "2", "3", "4", "5"]} 

p ARGV 
# => ["foobar"] 

El dothis o dothat los comandos pueden estar en cualquier lado El options hash y ARGV sigue siendo el mismo, independientemente:

# After options 
$ ruby optparse-positional-arguments.rb --verbose --list 1,2,3,4,5 foobar 

# In between options 
$ ruby optparse-positional-arguments.rb --verbose foobar --list 1,2,3,4,5 
+0

De esta manera no puedo estar seguro de si '' dothis' o dothat' fue el primer parámetro, ¿verdad? –

+0

Sí, tienes razón. Puedes pensarlo como 'script [comando] [opciones]'. Donde el comando y las opciones son intercambiables posicionalmente. Entonces también podría ser 'script [opciones] [comando]'. Eso funciona para ti? – csherin

+0

y ¿cuál sería una buena forma de obtener comandos posibles en la cadena de uso? solo pegarlo en el 'opts.banner'? – Paladin

Cuestiones relacionadas