在ruby中使用optionparser解析命令

在讨论OptionParser特性的文章中,我们讨论了在Ruby中使用OptionParser比手动查看ARGV来手动解析命令更可取的一些原因。现在是开始学习如何使用OptionParser及其特性的时候了。...

在讨论OptionParser特性的文章中,我们讨论了在Ruby中使用OptionParser比手动查看ARGV来手动解析命令更可取的一些原因。现在是开始学习如何使用OptionParser及其特性的时候了。

A businessman with a notebook

以下样板代码将用于本教程中的所有示例。要尝试任何示例,只需将示例的opts.on块放在TODO注释旁边。运行该程序将打印选项has和ARGV的状态,允许您检查开关的效果。

#!/usr/bin/env ruby require 'optparse' require 'pp' # This hash will hold all of the options # parsed from the command-line by # OptionParser. options = {} optparse = OptionParser.new do|opts| # TODO: Put command-line options here # This displays the help screen, all programs are # assumed to have this option. opts.on( '-h', '--help', 'Display this screen' ) do puts opts exit end end # Parse the command-line. Remember there are two forms # of the parse method. The 'parse' method simply parses # ARGV, while the 'parse!' method parses ARGV and removes # any options found there, as well as any parameters for # the options. What's left is the list of files to resize. optparse.parse! pp "Options:", options pp "ARGV:", ARGV

简单开关

简单开关是一个没有可选形式或参数的参数。其效果是只需在选项散列中设置一个标志。不会将其他参数传递给on方法。

options[:simple] = false opts.on( '-s', '--simple', "Simple argument" ) do options[:simple] = true end

带强制参数的开关

接受参数的开关只需要以开关的长格式声明参数名称。例如,“-f”、“--file file”表示-f或--file开关接受一个名为file的参数,并且该参数是必需的。如果不向-f或--file传递参数,则不能使用它们。

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

带可选参数的开关

开关参数不必是强制性的,它们可以是可选的。若要声明开关参数为可选参数,请将其名称放在开关说明的括号中。例如,“--logfile[FILE]”表示FILE参数是可选的。如果未提供,程序将假定一个正常的默认值,例如一个名为log.txt的文件。

在这个例子中,使用了成语a=b | | c。这只是“a=b”的简写,但如果b为false或nil,则a=c。

options[:opt] = false opts.on( '-o', '--optional [OPT]', "Optional argument" ) do|f| options[:opt] = f || "nothing" end

自动转换为浮点

OptionParser可以自动将参数转换为某些类型。其中一种类型是Float。要将参数自动转换为开关到Float,请在开关描述字符串之后将Float传递给on方法。

自动转换很方便。它们不仅可以为您节省将字符串转换为所需类型的步骤,还可以为您检查格式,如果格式不正确,将引发异常。

options[:float] = 0.0 opts.on( '-f', '--float NUM', Float, "Convert to float" ) do|f| options[:float] = f end

OptionParser可以自动转换为的其他一些类型包括时间和整数。

参数列表

参数可以解释为列表。这可以看作是转换为数组,就像转换为Float一样。虽然您的选项字符串可以定义名为“a、b、c”的参数,但OptionParser将盲目地允许列表中任意数量的元素。因此,如果需要特定数量的元素,请确保自己检查数组长度。

options[:list] = [] opts.on( '-l', '--list a,b,c', Array, "List of parameters" ) do|l| options[:list] = l end

参数集

有时,将参数限制为切换到几个选项是有意义的。例如,下面的开关将只接受一个强制参数,该参数必须是yes、no或maybe中的一个。如果该参数是任何其他参数,将引发异常。

为此,请将可接受参数列表作为符号传递到开关描述字符串之后。

options[:set] = :yes opts.on( '-s', '--set OPT', [:yes, :no, :maybe], "Parameters from a set" ) do|s| options[:set] = s end

否定形式的

开关可以具有否定形式。开关--negated可以有一个产生相反效果的开关,称为--no negated。要在开关描述字符串中对此进行描述,请将替代部分放在括号中:--[no-]negated。如果遇到第一个表单,则会将true传递给块,如果遇到第二个表单,则会阻止false。

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

  • 发表于 2021-10-10 08:25
  • 阅读 ( 208 )
  • 分类:编程

你可能感兴趣的文章

红宝石(ruby)和python(python)的区别

...优点是这些语言支持面向对象编程(OOP)。OOP方法有助于使用对象对一个或一组程序进行建模。Ruby和Python的关键区别在于Ruby主要用于web开发,而Python主要用于各种应用程序,包括web开发。Python还常用于科学计算、数据科学应用...

  • 发布于 2020-10-19 17:41
  • 阅读 ( 338 )

最适合新手的ruby互动介绍

...很有趣。另外,你有几个可爱的狐狸帮你通过快捷方式和命令。当您处理代码、散列、块和方法时,当您采取错误的步骤时,模拟器将提示您。温和的指导是一个重要的反馈。 ...

  • 发布于 2021-03-13 09:52
  • 阅读 ( 215 )

json-python解析:简单指南

...从几乎任何语言和环境中解析和生成JSON。本文主要讨论使用python处理JSON时产生的方法和问题。 ...

  • 发布于 2021-03-13 11:20
  • 阅读 ( 282 )

做一个壁挂式仪表板破折号.io和一个树莓派

...标准的Raspbian,一个基于Debian的操作系统,但是您也可以使用任何与Raspberry Pi兼容的Linux操作系统。作为破折号.io需要一个互联网连接,你还需要一个Wi-Fi适配器或以太网电缆到Pi运行。 ...

  • 发布于 2021-03-14 19:14
  • 阅读 ( 196 )

jekyll vs.gatsbyjs:哪个静态网站构建者构建了最好的网站?

...程语言的背景,你可能会发现这些建设者中的一个更容易使用。 ...

  • 发布于 2021-03-19 02:43
  • 阅读 ( 443 )

使用静态站点生成器快速构建网站

... 欢迎使用MakeUseOf指南来使用静态站点生成器。在本指南中,我们将介绍什么是静态站点生成器(SSG),为什么要使用它,以及如何使用它构建一个全新的站点。我们将探讨的一...

  • 发布于 2021-03-25 19:23
  • 阅读 ( 306 )

如何使用homebrew for os x安装软件包

...brew/install/master/install)" 更新:改为运行以下命令。如果您使用上面的命令运行ruby脚本,它将要求您运行以下命令: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" 这个脚本告诉你它将做什么。按Enter键...

  • 发布于 2021-04-08 09:05
  • 阅读 ( 193 )

如何在windows10的ubuntubashshell中安装linux软件

...安装和运行32位Linux程序。 相关:如何在windows10上安装和使用Linux Bash Shell 易于得到解释 在Ubuntu和其他基于Debian的Linux发行版上,可以使用apt-get命令安装软件。“Apt”代表“高级软件包工具”。这个命令从Ubuntu的集中软件库下...

  • 发布于 2021-04-09 11:19
  • 阅读 ( 191 )

5个杀手把戏让wireshark发挥最大效用

...捕获的数据包创建防火墙规则。如果您想像专业人士一样使用Wireshark,请继续阅读一些更高级的提示。 我们已经介绍了Wireshark的基本用法,所以请务必阅读我们的原始文章,了解这个强大的网络分析工具的介绍。 网络名称解...

  • 发布于 2021-04-11 05:46
  • 阅读 ( 153 )

如何使用基本正则表达式更好地搜索和节省时间

...并且可以超越简单编号系统的限制。 因为正则表达式的使用依赖于特殊的语法,所以您的程序必须能够读取和解析它们。许多用于Windows和OS X的批处理文件重命名程序都支持regexps,以及跨平台搜索工具GREP(我们在Bash Scripting for ...

  • 发布于 2021-04-12 20:50
  • 阅读 ( 146 )
m199452
m199452

0 篇文章

相关推荐