OptionParser-Befehlszeilenoptionen auf Ruby Way

click fraud protection

Ruby ist mit dem leistungsstarken und flexiblen Tool OptionParser ausgestattet, mit dem Befehlszeilenoptionen analysiert werden können. Sobald Sie gelernt haben, wie Sie dies verwenden, werden Sie ARGV nie mehr manuell durchsehen. 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 dem analysiert haben getoptlong C-Funktion, Sie werden sehen, wie willkommen einige dieser Änderungen sind.

  • OptionParser ist TROCKEN. Sie müssen den Befehlszeilenschalter, seine Argumente, den Code, der ausgeführt werden soll, wenn er auftritt, und die Beschreibung des Befehlszeilenschalters nur einmal in Ihr Skript schreiben. OptionParser generiert aus dieser Beschreibung automatisch Hilfebildschirme für Sie und leitet aus der Beschreibung alles über das Argument ab. Zum Beispiel wird es die kennen --Datei [DATEI] Option ist optional und akzeptiert ein einzelnes Argument. Auch das wird es wissen - [- nein] -verbose ist wirklich zwei Optionen und wird beide Formen akzeptieren.
  • instagram viewer
  • OptionParser konvertiert Optionen automatisch in eine bestimmte Klasse. Wenn die Option eine Ganzzahl akzeptiert, kann sie jede in der Befehlszeile übergebene Zeichenfolge in eine Ganzzahl konvertieren. Dies reduziert die Langeweile beim Parsen von Befehlszeilenoptionen.
  • Alles ist sehr zurückhaltend. Alle Optionen befinden sich an derselben Stelle, und der Effekt der Option steht neben der Definition für die Option. Wenn Optionen hinzugefügt, geändert werden müssen oder jemand einfach nur sehen möchte, was er tut, gibt es nur einen Ort, an dem er suchen kann. Sobald die Befehlszeile analysiert wurde, enthält ein einzelner Hash oder OpenStruct die Ergebnisse.

Genug schon, zeig mir etwas Code

Hier ist ein einfaches Beispiel für die Verwendung OptionParser. Es werden keine der erweiterten Funktionen verwendet, sondern nur die Grundlagen. Es gibt drei Optionen, von denen eine einen Parameter verwendet. Alle Optionen sind obligatorisch. Da sind die -v / - ausführlich und -q / - schnell Optionen sowie die -l / - Protokolldatei 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

 # von der Kommandozeile aus analysiert

 # OptionParser.

 options = {}


 optparse = OptionParser.new do | opts |

 # Setzen Sie ein Banner, das oben angezeigt wird

 # des Hilfebildschirms.

 opts.banner = "Verwendung: optparse1.rb [Optionen] Datei1 Datei2 ..."


 # Definieren Sie die Optionen und was sie tun

 options [: verbose] = false

 opts.on ('-v', '--verbose', 'Weitere Informationen ausgeben') do

 options [: verbose] = true

 Ende


 options [: quick] = false

 opts.on ('-q', '--quick', 'Aufgabe schnell ausführen') do

 options [: quick] = true

 Ende


 options [: logfile] = nil

 opts.on ('-l', '--logfile FILE', 'Write log to FILE') do | file |

 options [: logfile] = Datei

 Ende


 # Dies zeigt den Hilfebildschirm an, alle Programme sind

 # hat diese Option angenommen.

 opts.on ('-h', '--help', 'Diesen Bildschirm anzeigen') tun

 setzt opts

 Ausfahrt

 Ende

 Ende


 # Analysieren Sie die Befehlszeile. Denken Sie daran, dass es zwei Formen gibt

 # der Analysemethode. Die 'parse'-Methode analysiert einfach

 # ARGV, während die 'Analyse!' Methode analysiert ARGV und entfernt

 # alle dort gefundenen Optionen sowie alle Parameter für

 # die Optionen. Was bleibt, ist die Liste der Dateien, deren Größe geändert werden soll.

 optparse.parse!


 setzt "Ausführlich sein", wenn Optionen [: Ausführlich]

 setzt "Schnell sein", wenn Optionen [: schnell]

 setzt "Protokollierung in Datei # {options [: logfile]}", wenn options [: logfile]


 ARGV.each do | f |

 setzt "Größe des Bildes ändern # {f} ..."

 Schlaf 0,5

 Ende

Überprüfung des Codes

Zunächst einmal die optparse Bibliothek ist erforderlich. Denken Sie daran, das ist kein Juwel. Es wird mit Ruby geliefert, sodass Sie keinen Edelstein installieren oder benötigen Rubygems Vor optparse.

Dieses Skript enthält zwei interessante Objekte. Das erste ist Optionen, am obersten Punkt deklariert. Es ist einfach leer Hash. Wenn Optionen definiert sind, schreiben sie ihre Standardwerte in diesen Hash. Das Standardverhalten ist beispielsweise für dieses Skript nicht sei wortreich, also 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 macht sich bereit, alles zu analysieren. In diesem Block passiert die ganze Magie. Hier definieren Sie alle Optionen.

Optionen definieren

Jede Option folgt demselben Muster. Sie schreiben zuerst den Standardwert in den Hash. Dies wird geschehen, sobald die OptionParser ist konstruiert. Als nächstes rufen Sie die aufMethode, die die Option selbst definiert. Es gibt verschiedene Formen dieser Methode, aber hier wird nur eine verwendet. Mit 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 ableiten. Eine Sache, auf die geschlossen werden kann, ist das Vorhandensein von Parametern. Wenn die Option Parameter enthält, werden diese als Parameter an den Block übergeben.

Wenn die Option in der Befehlszeile gefunden 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 mehr getan werden, z. B. zu überprüfen, ob eine Datei, auf die verwiesen wird, vorhanden ist usw. Wenn Fehler auftreten, können Ausnahmen von diesen Blöcken ausgelöst 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 sie destruktiv. Es analysiert nicht nur die Befehlszeile, sondern entfernt auch alle gefundenen Optionen ARGV. Dies ist eine wichtige Sache, es wird nur die Liste der Dateien belassen, die nach den Optionen in bereitgestellt werden ARGV.

instagram story viewer