2010-01-30 11 views
7

Estoy tratando de obtener el manejo de opciones simple en mi aplicación de ruby. Parece que OptionParser hace la mayor parte de lo que yo quiero, aunque no puedo encontrar una manera de manejar con gracia los argumentos inesperados.Configurar el controlador de opción predeterminado para OptionParser de Ruby

Si se proporcionan argumentos inesperados, quiero tratarlo como si se hubiera pasado el argumento -h (mostrar uso y salir). Sin embargo, no veo ninguna manera de manejar eso.

Si OptionParser no puede hacerlo, ¿hay otra biblioteca que pueda usar para analizar fácilmente los argumentos de la línea de comandos?

Respuesta

10

Probablemente haya una forma elegante de hacerlo, pero no lo sé. He hecho esto:

opts = OptionParser.new 
    ... 
    opts.on_tail("-h", "--help", 
       "Show this message") do 
    puts opts 
    exit 
    end 
    begin  
    opts.parse!(argv) 
    rescue OptionParser::InvalidOption => e 
    puts e 
    puts opts 
    exit(1) 
    end 
+0

Eso es lo que terminé haciendo. Funciona para el caso que estoy manejando, pero prefiero poder establecer una devolución de llamada con comodín para cualquier opción que no esté explícitamente definida. – Herms

+0

Tengo curiosidad de por qué esto no funcionaría para ninguna opción no definida explícitamente. ¿OptionParser no lanzará siempre un error InvalidOption? – liquidki

+0

@liquidki - Creo que funcionará, porque OptionParser genera un error de InvalidOption para las opciones no definidas. –

0

si guarda a continuación como test.rb

#/usr/bin/env ruby 
require 'optparse' 

test = nil 
help = nil 
ARGV.options {|opt| 
    opt.on("--test=test") {|val| test=val} 
    help = opt.help 
    begin 
    opt.parse! 
    rescue OptionParser::InvalidOption => e 
    puts help 
    end 
} 

y ejecutar a continuación en la terminal,

$./test.rb --foo 

se obtiene a continuación.

Usage: test [options] 
    --test=test 
Cuestiones relacionadas