Verwenden von OptionParser zum Analysieren von Befehlen in Ruby

In dem Artikel über die Funktionen von OptionParser wurden einige Gründe erläutert, die die Verwendung von OptionParser in Ruby der manuellen Suche in ARGV vorziehen, um Befehle von Hand zu analysieren. Jetzt ist es Zeit, sich mit OptionParser und seinen Funktionen vertraut zu machen.

Der folgende Code wird für alle Beispiele in diesem Lernprogramm verwendet. Um eines der Beispiele zu testen, geben Sie einfach die Beispiele ein opts.on Block neben dem TODO-Kommentar. Wenn Sie das Programm ausführen, werden der Status der Optionen und ARGV gedruckt, sodass Sie die Auswirkungen Ihrer Schalter untersuchen können.

#! / usr / bin / env ruby
erfordern 'optparse'
erfordern 'pp'
# Dieser Hash enthält alle Optionen
# geparst von der Kommandozeile aus
# OptionParser.
options =
optparse = OptionParser.new do | opts |
# TODO: Geben Sie hier die Befehlszeilenoptionen ein
# Dies zeigt den Hilfebildschirm an, alle Programme sind
Es wird davon ausgegangen, dass # diese Option hat.
opts.on ('-h', '--help', 'Diesen Bildschirm anzeigen')
setzt opts
Ausfahrt
Ende
Ende
# Analysieren Sie die Befehlszeile. Denken Sie daran, es gibt zwei Formen
# der Analysemethode. Die 'parse'-Methode analysiert einfach
# ARGV, während das 'Parsen!' Methode analysiert ARGV und entfernt
# dort gefundene Optionen sowie Parameter für
# die Optionen. Was bleibt, ist die Liste der Dateien, deren Größe geändert werden soll.
optparse.parse!
pp "Optionen:", Optionen
pp "ARGV:", ARGV

Einfacher Schalter

Ein einfacher Schalter ist ein Argument ohne optionale Formulare oder Parameter. Der Effekt besteht darin, einfach ein Flag im Options-Hash zu setzen. Es werden keine weiteren Parameter an den übergeben auf Methode.

options [: simple] = false
opts.on ('-s', '--simple', "Einfaches Argument")
options [: simple] = true
Ende

Schalter mit Pflichtparameter

Schalter, die einen Parameter annehmen, müssen nur den Parameternamen in der Langform des Schalters angeben. Beispielsweise, "-f", "--file FILE" bedeutet, dass der Schalter -f oder --file einen einzelnen Parameter mit dem Namen FILE akzeptiert und dieser Parameter obligatorisch ist. Sie können weder -f noch --file verwenden, ohne ihm auch einen Parameter zu übergeben.

options [: mand] = ""
opts.on ('-m', '--mandatory FILE', "Mandatory argument") do | f |
options [: mand] = f
Ende

Schalter mit optionalem Parameter

Schalterparameter müssen nicht obligatorisch sein, sie können optional sein. Um einen Schalterparameter als optional zu deklarieren, setzen Sie seinen Namen in der Schalterbeschreibung in Klammern. Beispielsweise, "--logfile [DATEI]" bedeutet, dass der Parameter FILE optional ist. Wenn nicht angegeben, geht das Programm von einer vernünftigen Standardeinstellung aus, beispielsweise einer Datei mit dem Namen log.txt.

Im Beispiel die Redewendung a = b || c wird genutzt. Dies ist nur eine Abkürzung für "a = b, aber wenn b falsch oder null ist, ist a = c".

options [: opt] = false
opts.on ('-o', '--optional [OPT]', "Optionales Argument") do | f |
Optionen [: opt] = f || "nichts"
Ende

Automatisch in Float konvertieren

OptionParser kann Argumente automatisch in bestimmte Typen konvertieren. Einer dieser Typen ist Float. Um Ihre Argumente automatisch in einen Wechsel zu Float umzuwandeln, übergeben Sie Float an auf Methode nach den Zeichenfolgen für die Schalterbeschreibung.

Automatische Konvertierungen sind praktisch. Sie ersparen Ihnen nicht nur den Konvertierungsschritt für die Zeichenfolge in den gewünschten Typ, sondern überprüfen auch das Format für Sie und lösen eine Ausnahme aus, wenn es falsch formatiert ist.

options [: float] = 0.0
opts.on ('-f', '--float NUM', Float, "In float konvertieren") do | f |
options [: float] = f
Ende

Einige andere Typen, in die OptionParser automatisch konvertieren kann, umfassen Time und Integer.

Listen von Argumenten

Argumente können als Listen interpretiert werden. Dies kann als Konvertierung in ein Array angesehen werden, während Sie in Float konvertiert haben. Während Ihre Optionszeichenfolge den Parameter definieren kann, der als "a, b, c" bezeichnet werden soll, lässt OptionParser blind eine beliebige Anzahl von Elementen in der Liste zu. Wenn Sie also eine bestimmte Anzahl von Elementen benötigen, müssen Sie die Länge des Arrays selbst überprüfen.

options [: list] = []
opts.on ('-l', '--list a, b, c', Array, "Liste der Parameter") do | l |
options [: list] = l
Ende

Reihe von Argumenten

Manchmal ist es sinnvoll, Argumente auf einen Wechsel auf einige wenige Möglichkeiten zu beschränken. Beispielsweise akzeptiert der folgende Schalter nur einen einzigen obligatorischen Parameter, und der Parameter muss einer von beiden sein Ja, Nein oder könnte sein. Wenn der Parameter etwas anderes ist, wird eine Ausnahme ausgelöst.

Übergeben Sie dazu eine Liste der zulässigen Parameter als Symbole nach den Zeichenfolgen für die Schalterbeschreibung.

options [: set] =: yes
opts.on ('-s', '--set OPT', [: yes,: no,: maybe], "Parameter aus einer Menge") do | s |
options [: set] = s
Ende

Negierte Formen

Schalter können eine negierte Form haben. Der Schalter --negiert kann eine haben, die den gegenteiligen Effekt hat, genannt --nicht verneint. Um dies in der Schalterbeschreibungszeichenfolge zu beschreiben, setzen Sie den alternativen Teil in Klammern: --[no-] negiert. Wenn das erste Formular angetroffen wird, wird true an den Block übergeben, und false wird blockiert, wenn das zweite Formular angetroffen wird.

options [: neg] = false
opts.on ('-n', '- [no-] negated', "Negated forms") do | n |
options [: neg] = n
Ende