2010-01-30 18 views
7

Sto cercando di ottenere una semplice gestione delle opzioni nella mia app rubino. Sembra che lo OptionParser faccia la maggior parte di ciò che voglio, anche se non riesco a capire come gestire in modo armonioso gli argomenti inattesi.Impostare il gestore opzioni predefinito per OptionParser di ruby ​​

Se vengono forniti argomenti inattesi, desidero trattarlo come se fosse stato passato l'argomento -h (mostra uso e esci). Però non vedo alcun modo per gestirlo.

Se OptionParser non ce la fa, c'è un'altra libreria che potrei usare per analizzare facilmente gli argomenti della riga di comando?

risposta

10

Probabilmente c'è un modo perfetto per farlo, ma non lo so. Ho fatto questo:

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

Questo è quello che ho finito per fare. Funziona per il caso che sto gestendo, ma preferirei piuttosto impostare un callback con caratteri jolly per tutte le opzioni che non sono definite in modo esplicito. – Herms

+0

Sono curioso del perché questo non avrebbe funzionato per tutte le opzioni non definite in modo esplicito. OptionParser non genera sempre un errore InvalidOption? – liquidki

+0

@liquidki - Penso che _will_ funzioni, perché OptionParser genera un errore InvalidOption per le opzioni non definite. –

0

se si salva sotto come 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 
} 

ed eseguire sotto nel terminale,

$./test.rb --foo 

si ottiene sotto.

Usage: test [options] 
    --test=test 
Problemi correlati