Computerwissenschaften

OptionParser-Befehlszeilenoptionen auf Ruby Way

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 Optionen jemals manuell in Ruby oder C oder mit der Funktion getoptlong C analysiert haben , werden Sie sehen, wie willkommen einige dieser Änderungen sind.

    • OptionParser ist DRY. 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. Beispielsweise weiß es, dass die Option –file [FILE] optional ist und ein einzelnes Argument akzeptiert . Außerdem wird es wissen, dass – [- no] -verbose wirklich zwei Optionen sind und beide Formen akzeptieren.
    • 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 von 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. Es gibt die Optionen -v / – verbose und -q / – quick sowie die Option -l / – logfile FILE . 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') tun

 

 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 wird die Optparse- Bibliothek benötigt. Denken Sie daran, das ist kein Juwel. Es wird mit Ruby geliefert , sodass Sie vor dem Optparse weder einen Edelstein installieren noch Rubygems benötigen .

Es gibt zwei interessante Objekte in diesem Skript. Das erste sind Optionen , die im obersten Bereich deklariert sind. Es ist ein einfacher leerer Hash. Wenn Optionen definiert sind, schreiben sie ihre Standardwerte in diesen Hash. Das Standardverhalten ist beispielsweise, dass dieses Skript nicht ausführlich ist. Daher wird options [: verbose] auf false gesetzt. Wenn Optionen in der Befehlszeile gefunden werden, ändern sie die Werte in Optionen , um ihre Wirkung widerzuspiegeln. Wenn beispielsweise -v / – verbose angetroffen wird, werden Optionen [: verbose] true zugewiesen .

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 geschieht, sobald der OptionParser erstellt wurde . Als Nächstes rufen Sie die on- Methode auf. 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.

Die on- 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 an die on- Methode übergebene Block ausgeführt. Hier machen die Blöcke nicht viel, sie setzen nur Werte im Options-Hash. Es kann noch mehr getan werden, z. B. um zu überprüfen, ob eine Datei vorhanden ist, auf die verwiesen wird 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 Analyse! Methode für ein OptionParser- Objekt. Es gibt tatsächlich zwei Formen dieser Methode: Parsen und Parsen! . Wie die Version mit dem Ausrufezeichen impliziert, ist sie destruktiv. Es analysiert nicht nur die Befehlszeile, sondern entfernt auch alle in ARGV gefundenen Optionen . Dies ist eine wichtige Sache, da nur die Liste der Dateien übrig bleibt, die nach den Optionen in ARGV bereitgestellt werden .

Similar Posts

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.