Options de ligne de commande OptionParser de la manière Ruby

Ruby est équipé d'un outil puissant et flexible pour analyser les options de ligne de commande, OptionParser. Une fois que vous aurez appris à l'utiliser, vous ne reviendrez jamais à la recherche manuelle dans ARGV. OptionParser possède un certain nombre de fonctionnalités qui le rendent très attrayant pour les programmeurs Ruby. Si vous avez déjà analysé des options à la main en Ruby ou C, ou avec le getoptlong Fonction C, vous verrez à quel point certains de ces changements sont les bienvenus.

  • OptionParser est SEC. Vous n'avez qu'à écrire le commutateur de ligne de commande, ses arguments, le code à exécuter lorsqu'il est rencontré et la description du commutateur de ligne de commande une fois dans votre script. OptionParser générera automatiquement des écrans d'aide pour vous à partir de cette description, et déduira tout sur l'argument à partir de sa description. Par exemple, il saura --file [FILE] option est facultative et prend un seul argument. De plus, il saura que - [- non] -verbose est vraiment deux options et acceptera les deux formes.
  • instagram viewer
  • OptionParser convertira automatiquement les options dans une classe spécifique. Si l'option prend un entier, elle peut convertir n'importe quelle chaîne passée sur la ligne de commande en un entier. Cela réduit une partie de l'ennui impliqué dans l'analyse des options de ligne de commande.
  • Tout est très contenu. Toutes les options sont au même endroit, et l'effet de l'option est juste à côté de la définition de l'option. Si des options doivent être ajoutées, modifiées ou que quelqu'un veut simplement voir ce qu'il fait, il n'y a qu'un seul endroit où chercher. Une fois la ligne de commande analysée, un seul hachage ou OpenStruct contiendra les résultats.

Assez déjà, montrez-moi du code

Voici donc un exemple simple d'utilisation OptionParser. Il n'utilise aucune des fonctionnalités avancées, juste les bases. Il existe trois options et l'une d'elles prend un paramètre. Toutes les options sont obligatoires. Il y a le -v / - verbeux et -q / - rapide options, ainsi que les -l / - fichier journal option. De plus, le script prend une liste de fichiers indépendamment des options.

 #! / usr / bin / env rubis

 # Un script qui prétend redimensionner un certain nombre d'images

 exiger 'optparse'


 # Ce hachage contiendra toutes les options

 # analysé depuis la ligne de commande par

 # OptionParser.

 options = {}


 optparse = OptionParser.new do | opts |

 # Définissez une bannière, affichée en haut

 # de l'écran d'aide.

 opts.banner = "Utilisation: optparse1.rb [options] file1 file2 ..."


 # Définissez les options et ce qu'elles font

 options [: verbose] = false

 opts.on ('-v', '--verbose', 'Output more information') do

 options [: verbose] = true

 fin


 options [: rapide] = faux

 opts.on ('-q', '--quick', 'Effectuer la tâche rapidement') do

 options [: quick] = true

 fin


 options [: logfile] = nil

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

 options [: logfile] = fichier

 fin


 # Ceci affiche l'écran d'aide, tous les programmes sont

 # supposé avoir cette option.

 opts.on ('-h', '--help', 'Afficher cet écran') do

 met opts

 sortie

 fin

 fin


 # Analyser la ligne de commande. N'oubliez pas qu'il existe deux formes

 # de la méthode d'analyse. La méthode 'parse' analyse simplement

 # ARGV, tandis que le 'parse!' la méthode analyse ARGV et supprime

 # toutes les options qui s'y trouvent, ainsi que tous les paramètres pour

 # les options. Ce qui reste est la liste des fichiers à redimensionner.

 optparse.parse!


 met "étant verbeux" si les options [: verbose]

 met "Être rapide" si les options [: rapide]

 met "Journalisation dans le fichier # {options [: logfile]}" si les options [: logfile]


 ARGV.chaque do | f |

 met "Redimensionner l'image # {f} ..."

 dormir 0,5

 fin

Examen du code

Pour commencer, le optparse bibliothèque est requise. Rappelez-vous, ce n'est pas un gemme. Il est livré avec Ruby, donc il n'est pas nécessaire d'installer une gemme ou de demander rubygems avant optparse.

Il y a deux objets intéressants dans ce script. Le premier est les options, déclaré au sommet. C'est un simple vide hacher. Lorsque les options sont définies, elles écrivent leurs valeurs par défaut dans ce hachage. Par exemple, le comportement par défaut est que ce script ne pas être verbeux, alors options [: verbose] est défini sur false. Lorsque des options sont rencontrées sur la ligne de commande, elles modifient les valeurs dans les options pour refléter leur effet. Par exemple, lorsque -v / - verbeux est rencontré, il affectera true à options [: verbose].

Le deuxième objet intéressant est optparse. C'est le OptionParser objet lui-même. Lorsque vous construisez cet objet, vous lui passez un bloc. Ce bloc est exécuté pendant la construction et va créer une liste d'options dans les structures de données internes, et se prépare à tout analyser. C'est dans ce bloc que toute la magie opère. Vous définissez ici toutes les options.

Définition des options

Chaque option suit le même schéma. Vous écrivez d'abord la valeur par défaut dans le hachage. Cela se produira dès que le OptionParser est construit. Ensuite, vous appelez le surméthode, qui définit l'option elle-même. Il existe plusieurs formes de cette méthode, mais une seule est utilisée ici. Les autres formulaires vous permettent de définir des conversions de types automatiques et des ensembles de valeurs auxquels une option est limitée. Les trois arguments utilisés ici sont la forme courte, la forme longue et la description de l'option.

le sur La méthode déduira un certain nombre de choses du formulaire long. Une chose à en déduire est la présence de tout paramètre. Si des paramètres sont présents sur l'option, elle les transmettra en tant que paramètres au bloc.

Si l'option est rencontrée sur la ligne de commande, le bloc transmis à la sur est exécutée. Ici, les blocs ne font pas grand-chose, ils définissent simplement des valeurs dans le hachage des options. Plus pourrait être fait, comme vérifier qu'un fichier auquel il est fait référence existe, etc. S'il y a des erreurs, des exceptions peuvent être levées à partir de ces blocs.

Enfin, la ligne de commande est analysée. Cela se produit en appelant le analyser! méthode sur un OptionParser objet. Il existe en fait deux formes de cette méthode, analyser et analyser!. Comme la version avec le point d'exclamation l'indique, elle est destructrice. Non seulement il analyse la ligne de commande, mais il supprimera toutes les options trouvées dans ARGV. Ceci est important, il ne restera que la liste des fichiers fournis après les options de ARGV.

instagram story viewer