2013-03-18 15 views
6

Ich derzeit Skript in Python, aber ich möchte Ruby aus verschiedenen Gründen versuchen. Ich habe mir in der letzten Woche eine Menge Beispielcode angeschaut und viele Dokumente gelesen. Ein Punkt, der mich beschäftigt, ist das Fehlen eines richtigen Befehlszeilenarguments, das Bibliotheken in Ruby analysiert. Ruby-Experten, werde nicht sauer auf mich - vielleicht weiß ich es nicht. Deshalb bin ich hier.Ruby optparse Einschränkungen

In Python war ich gewohnt, argparse zu verwenden, was meiner Meinung nach einfach perfekt ist (vielleicht für meine Bedürfnisse). Leider erlaubt OptionParser nicht die Flexibilität und Funktionen, die argparse tut.

Ich suche speziell auf die folgenden Einschränkungen für jetzt:

  1. Wie kann ich sich gegenseitig ausschließende Optionslisten? Für z.B. eine sehr kleine Optionsliste für ein Programm namens test.

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

    und so weiter:

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

    kann ich einige Code wie schreiben. Aber dann habe ich keine Möglichkeit, a, b und c sich gegenseitig auszuschließen, es sei denn ich eine Permutation dieser Codes und einige Fehlerbehandlung. Für z.B.

    test -ab #should through an error 
    

    In Python, ich könnte dies zu tun, in einer sehr einfachen Art und Weise:

    # 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. Zweitens, ich habe keine Möglichkeit, Paarung -d mit -a, wenn ich speziell Code für diese Permutation schreiben . Das ist verrückt.

    2. Ich muss die [OPTION] Liste selbst schreiben; Ich habe keine Möglichkeit zu wissen, ob ich falsch oder richtig bin, es sei denn, und bis ich eine Blackbox teste, die alle möglichen Eingabepermutationen testet und sie der Blackbox-Liste zuordnet.

    3. Darüber hinaus müssen obligatorische Argumente erneut mit speziellen Code behandelt werden.

Gibt es eine einfache, diese Beschränkungen der Handhabung optparse oder andere Bibliotheken in Ruby verwenden?

Antwort

10

Es gibt docopt Bibliothek, die sowohl Python und Ruby-Implementierungen hat. Die Spezifikation für das test Programm ist:

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

a, b, c sind sich gegenseitig ausschließende Optionen (-ab erzeugt einen Fehler) unterstützt es Optionen kombiniert: -ad, -da usw.

Um die filename zu machen Parameter obligatorisch:

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

Wow. Das ist verrückt. Epos. Zeitraum. Was zur Hölle habe ich so lange gemacht.Das ist fantastisch. Danke vielmals. – p0lAris