Ruby ist mit dem leistungsstarken und flexiblen Tool OptionParser ausgestattet, mit dem Befehlszeilenoptionen analysiert werden können. Wenn Sie erst einmal gelernt haben, wie Sie dies anwenden, können Sie ARGV nicht mehr manuell durchsuchen. OptionParser verfügt über eine Reihe von Funktionen, die es für Ruby-Programmierer sehr attraktiv machen. Wenn Sie jemals Optionen von Hand in Ruby oder C oder mit der geparst haben getoptlong C-Funktion, werden Sie sehen, wie willkommen einige dieser Änderungen sind.
Hier ist ein einfaches Beispiel für die Verwendung OptionParser. Es werden keine erweiterten Funktionen verwendet, nur die Grundlagen. Es gibt drei Optionen, von denen eine einen Parameter übernimmt. Alle Optionen sind obligatorisch. Da sind die -v / - ausführlich und -q / - schnell Optionen sowie die -l / - Logdatei DATEI Möglichkeit. Darüber hinaus erstellt das Skript eine Liste von Dateien, die von den Optionen unabhängig sind.
#! / usr / bin / env ruby
# Ein Skript, das vorgibt, die Größe einer Reihe von Bildern zu ändern
erfordern 'optparse'
# Dieser Hash enthält alle Optionen
# geparst von der Kommandozeile aus
# OptionParser.
options =
optparse = OptionParser.new do | opts |
# Legen Sie ein Banner fest, das oben angezeigt wird
# des Hilfebildschirms.
opts.banner = "Verwendung: optparse1.rb [Optionen] file1 file2…"
# Definieren Sie die Optionen und was sie tun
options [: verbose] = false
opts.on ('-v', '--verbose', 'Weitere Informationen ausgeben')
options [: verbose] = true
Ende
options [: quick] = false
opts.on ('-q', '--quick', 'Task schnell ausführen')
options [: quick] = true
Ende
options [: logfile] = nil
opts.on ('-l', '--logfile FILE', 'Write log to FILE') do | file |
options [: logfile] = file
Ende
# 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!
setzt "wortreich sein" wenn Optionen [: wortreich]
setzt "schnell sein" wenn Optionen [: schnell]
setzt "Logging to file # options [: logfile]" wenn options [: logfile]
ARGV.each do | f |
Setzt "Bildgröße ändern # f ..."
schlaf 0,5
Ende
Zunächst die optparse Bibliothek ist erforderlich. Denken Sie daran, das ist kein Juwel. Ruby ist im Lieferumfang enthalten, sodass Sie keinen Edelstein installieren oder benötigen Rubygems Vor optparse.
In diesem Skript gibt es zwei interessante Objekte. Das erste ist Optionen, am obersten Geltungsbereich deklariert. Es ist ein einfacher leerer Hash. Wenn Optionen definiert sind, schreiben sie ihre Standardwerte in diesen Hash. Beispielsweise ist das Standardverhalten für dieses Skript nicht wortreich sein Optionen [: ausführlich] ist auf false gesetzt. Wenn Optionen in der Befehlszeile gefunden werden, ändern sie die Werte in Optionen um ihre Wirkung zu reflektieren. Zum Beispiel, wenn -v / - ausführlich angetroffen wird, wird es true zuweisen Optionen [: ausführlich].
Das zweite interessante Objekt ist optparse. Dies ist das OptionParser Objekt selbst. Wenn Sie dieses Objekt erstellen, übergeben Sie ihm einen Block. Dieser Block wird während der Erstellung ausgeführt und erstellt eine Liste von Optionen in internen Datenstrukturen und bereitet sich darauf vor, alles zu analysieren. In diesem Block geschieht die ganze Magie. Hier legen Sie alle Optionen fest.
Jede Option folgt demselben Muster. Sie schreiben zuerst den Standardwert in den Hash. Dies wird geschehen, sobald der OptionParser ist konstruiert. Als nächstes rufst du die auf Methode, die die Option selbst definiert. Es gibt verschiedene Formen dieser Methode, aber hier wird nur eine verwendet. In den anderen Formularen können Sie automatische Typkonvertierungen und Wertesätze definieren, auf die eine Option beschränkt ist. Die drei hier verwendeten Argumente sind die Kurzform, die Langform und die Beschreibung der Option.
Das auf Methode wird eine Reihe von Dingen aus der langen Form schließen. Eine Sache, auf die man schließen kann, ist das Vorhandensein von Parametern. Wenn für die Option Parameter vorhanden sind, werden diese als Parameter an den Block übergeben.
Wenn die Option in der Befehlszeile angezeigt wird, wird der Block an die übergeben auf Methode wird ausgeführt. Hier machen die Blöcke nicht viel, sie setzen nur Werte im Options-Hash. Es könnte noch mehr getan werden, z. B. um zu überprüfen, ob eine Datei existiert, auf die verwiesen wird. Bei Fehlern können Ausnahmen von diesen Blöcken geworfen werden.
Schließlich wird die Befehlszeile analysiert. Dies geschieht durch Aufrufen der analysieren! Methode auf einem OptionParser Objekt. Es gibt tatsächlich zwei Formen dieser Methode, analysieren und analysieren!. Wie die Version mit dem Ausrufezeichen impliziert, ist es destruktiv. Es analysiert nicht nur die Befehlszeile, sondern entfernt auch alle gefundenen Optionen ARGV. Dies ist wichtig, da nur die Liste der Dateien nach den Optionen in angezeigt wird ARGV.