2013-03-18 13 views
6

Attualmente sto scrivendo in Python ma desidero provare Ruby per diversi motivi. Ho esaminato un sacco di codice di esempio e ho letto molta documentazione nell'ultima settimana. Uno dei motivi di preoccupazione che ho è la mancanza di un corretto argomento della riga di comando che analizza le librerie in Ruby. Esperti di rubini, non arrabbiarti con me - forse non lo so. Ecco perché sono qui.Ruby optparse Limitazioni

In Python, ero abituato a usare argparse che a mio parere è semplicemente perfetto (forse per le mie esigenze). Sfortunatamente, OptionParser non consente la flessibilità e le funzionalità di argparse.

Sono in particolare guardando i seguenti vincoli per ora:

  1. Come faccio liste delle opzioni si escludono a vicenda? Ad es. una lista di opzioni molto piccola per un programma chiamato test.

    usage: test [-h] [-a | -b | -c] [-d] [filename] 
    

    posso scrivere del codice come:

    # implement a ---------------------------------------------- 
    opts.on("-a", "--alpha", 
         "implement alpha") do 
        #... 
    end 
    

    e così via. Ma poi, non ho modo di rendere a, b e c mutuamente esclusivi a meno che non codifichi una permutazione di quelli e faccia qualche gestione degli errori. Ad es.

    test -ab #should through an error 
    

    In Python, ho potuto farlo in un modo molto semplice:

    # create an command line argument parser object 
    cmd_line_parser = argparse.ArgumentParser() 
    
    # create a mutually exclusive group 
    cmd_line_group = cmd_line_parser.add_mutually_exclusive_group() 
    
    1. In secondo luogo, non ho modo di abbinamento con -d-a a meno che non espressamente scrivere il codice per questo permutazione . Questo è folle.

    2. Devo scrivere l'elenco [OPTION]; Non ho modo di sapere se ho torto o ragione a meno che e fino a quando non faccio un test blackbox per tutte le possibili permutazioni di input e li mappo alla lista blackbox.

    3. Inoltre, gli argomenti obbligatori devono essere nuovamente gestiti utilizzando un codice speciale.

v'è un facile di trattare questi vincoli utilizzando optparse o altre librerie in Ruby?

risposta

10

C'è la libreria docopt che ha implementazioni sia in Python che in Ruby. La specifica per il programma test è:

usage: test [-h] [-a | -b | -c] [-d] [<filename>] 

a, b, c opzioni si escludono a vicenda (-ab produce un errore), supporta opzioni combinate: -ad, -da, ecc

per rendere il filename parametro obbligatorio:

usage: test [-h] [-a | -b | -c] [-d] <filename> 
+0

Wow. Questo è folle. Epico. Periodo. Che diavolo ho fatto da così tanto tempo.Questo è impressionante. Molte grazie. – p0lAris