用 OptionParser 构建 Command Line 工具
来源:互联网 发布:js软键盘关闭事件 编辑:程序博客网 时间:2024/05/17 07:38
用OptionParser创建命令行工具
下面这张图就是Ruby给出的OptionParser的文档,除了这张图片之外就是一个官方范例,然后就没了… 说实话我第一眼看了这张图和官方范例后感觉看不懂,需要反复通过Google各种文章和范例,才了解到了OptionParser的基本用法。
+--------------+| OptionParser |<>-----++--------------+ | +--------+ | ,-| Switch | on_head -------->+---------------+ / +--------+ accept/reject -->| List |<|>- | |<|>- +----------+ on ------------->+---------------+ `-| argument | : : | class | +---------------+ |==========| on_tail -------->| | |pattern | +---------------+ |----------|OptionParser.accept ->| DefaultList | |converter | reject |(shared between| +----------+ | all instances)| +---------------+
通常的Unix命令行参数包含下面这些形式:
- Option - Option主要功能是用于调整命令行工具的行为,Option的表现通常有两种形式,
short option
或者long option
。Option的类型有两种,switch
或flag
,switch
不带argument,而flag
带有argument。 - Argument - Argument通常表示命令行工具要操作的对象,通常是路径,URL或者名称等等。
- Action - 表示命令行工具的行为,比如
git
命令的push
或者pull
等等。
举个例子git log --max-count=10
:git
是command。log
是action,表示查看git的提交历史。--max-count
就是option,表示最多显示N条commit记录。而最后的=10
就是argument,表示option的数值,即查看最后10条历史提交记录。所有的Unix命令行工具都遵循这样的一个约定,这里需要主意一下,Argument前面的=
在很多命令行工具中是可以省略的。
用OptionParser
创建一个简单的命令行工具,通常我们只需要创建一个OptionParser
的实例instance,然后给这个instance传入一个block,在这个block内部我们就可以使用OptionParser提供的方法来解析命令行参数,特别是用on
方法来根据定义捕捉各种参数,并将参数解析成可被使用的Ruby数据,如String,Boolean,Array以及Hash等。而on
方法最让人困惑的地方就是它异常灵活参数处理,比如on
方法的第一个参数,如果是一个-
加一个非空格字符,则把这个参数当作switch来处理,例如on('-n')
,如果是一个-
开头的字符,后面跟着一个空格外加另外一个字符,那么就把这个参数当作flag处理,例如on('-n NAME')
。如果on
方法的参数超过两个,并且两个都是String,那么则视这两个参数表示一个意思,例如on('-n NAME', '--name NAME')
。如此这般的例子还有很多,如果有更高需求的朋友,我建议你还是直接去啃源代码吧。
下面我创建一个名为my_awesome_command.rb
的命令行工具,这个工具直接输出我的命令行参数解析的结果,我用中文注释来说明OptionParser是怎么用的:
#!/usr/bin/env rubyrequire 'optparse'options = {}option_parser = OptionParser.new do |opts| # 这里是这个命令行工具的帮助信息 opts.banner = 'here is help messages of the command line tool.' # Option 作为switch,不带argument,用于将switch设置成true或false options[:switch] = false # 下面第一项是Short option(没有可以直接在引号间留空),第二项是Long option,第三项是对Option的描述 opts.on('-s', '--switch', 'Set options as switch') do # 这个部分就是使用这个Option后执行的代码 options[:switch] = true end # Option 作为flag,带argument,用于将argument作为数值解析,比如"name"信息 #下面的“value”就是用户使用时输入的argument opts.on('-n NAME', '--name Name', 'Pass-in single name') do |value| options[:name] = value end # Option 作为flag,带一组用逗号分割的arguments,用于将arguments作为数组解析 opts.on('-a A,B', '--array A,B', Array, 'List of arguments') do |value| options[:array] = value endend.parse!puts options.inspect
执行结果
$ ruby my_awesome_command.rb -hhere is help messages of the command line tool. -s, --switch Set options as switch -n, --name Name Pass-in single name -a, --array A,B List of arguments$ ruby my_awesome_command.rb -s{:switch=>true}$ ruby my_awesome_command.rb -n Daniel{:switch=>false, :name=>"Daniel"}$ ruby my_awesome_command.rb -a Foo,Bar{:switch=>false, :array=>["Foo", "Bar"]}
- 用 OptionParser 构建 Command Line 工具
- 用 OptionParser 构建 Command Line 工具
- 用OptionParser创建命令行工具
- command line tools工具无法调用
- Xcode Command Line Tools(命令行工具)
- OptionParser
- Linux Command Line and....ch11(构建基本脚本)
- command line
- command line
- command line
- Command-line
- Command Line
- MAC OS 如何安装命令行工具:Command Line Tools
- Mavericks下如何安装Command Line Tools(命令行工具)
- aerospike工具集——Command-Line Utility (cli)
- MAC下检查是否安装command line tools 工具
- Scrapy学习笔记(3)--Command line tool(命令行工具)
- Command Line -- List of command line commands
- 如何在程序中添加iAd广告
- Linux、windows下回车换行格式转换 回车换行结尾转换
- 我们的毕设-苏醒
- cassandra简介
- mvc中获取url传参
- 用 OptionParser 构建 Command Line 工具
- JavaMail的java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream错误
- Android Animation学习笔记
- JPivot标签库使用说明
- 【转】揭秘SAP在华真相:天价收费与用户之灾
- 舒淇回忆被揭三级片经历:骂人不用骂到祖宗十八代
- Oracle Clusterware 工具集(1)!
- 软件开发量评估法之一---德尔菲评估法
- Allegro学习笔记之——导出Gerber文件和钻孔数据文件