我需要解析一个命令行
  script.rb <mandatory filename> [options]
用optparse.
当然我可以写一些自定义代码来处理文件名,然后传递ARGV给optparse,但也许有一种更简单的方法呢?
编辑:还有另一种解析这样一个命令行的hacky方法,那就是传递['--mandatory-filename'] + ARGV给optparse,然后处理--mandatory-filename选项.
Jul*_*lik 47
首先parse!使用optparse,然后扫描ARGV并在ARGV为空时进行提升.像这样:
op.parse!
filename = ARGV.pop
raise "Need to specify a file to process" unless filename
强制性文件名将不会被处理,OptionParser并将在ARGV中留给您 - 如果它不在那里,只需手动提升.
小智 9
只是为了跟进Julik和Shadowfirebird所说的内容:解析时OptionParser要注意parse!并parse具有不同的功能.前者将从传递的数组中删除它理解的每个参数,后者将离开它们.这会更改您确定所需参数是否存在的条件.
尽管它并不适用于所有情况,但是能够在单个命令行上处理多个文件通常很不错,例如:
script.rb [options] file1 file2 ...
file1是强制性的,而file2及更高版本是可选的。
我知道的最好方法是遵循以下约定:
options = {}
optparse = OptionParser.new do |opts|
  opts.banner = "Usage: script.rb [options] file1 file2 ..."
  opts.on('-a', '--an-option ARG', 'Set some option') do |arg|
    options[:a] = arg
  end
  ...
end
optparse.parse!
# Check required conditions
if ARGV.empty?
  puts optparse
  exit(-1)
end
如果未提供文件,将显示帮助消息,并带有用法标语和选项说明。如果文件存在,它们将是ARGV中剩下的唯一内容。
| 归档时间: | 
 | 
| 查看次数: | 13491 次 | 
| 最近记录: |