没有分隔符的OptParse中的参数列表

时间:2016-02-17 14:54:45

标签: ruby optparse

我目前正在构建一个简单的程序,它将在标准输出上读写文件。我想以这种方式启动我的程序:ruby main.rb -f file1 file2 file3 ...

但是使用optParse我不能让它工作我必须包含分隔符..我需要optParse,因为我处理多个选项(如verbose,help ...)。所以,如果我这样做:ruby main.rb -f file1,file2 ......它的工作原理

我怎样才能做到这一点?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您没有传递选项参数,或者所有其他参数都是可选的,您只需通过传统方式传递文件:via ARGV。默认情况下,命令行选项由空格分隔,而不是逗号。

如果您绝对需要支持-f选项,则可以另外添加对ARGV的支持

require "optparse"

options = {
  :files => []
}
opt_parse = OptionParser.new do |opts|
  opts.banner = "Usage: main.rb file(s) ..."

  opts.on("-f", "--files file1,file2,...", Array, "File(s)") do |f|
    options[:files] += f
  end

  opts.on_tail("-h", "--help", "Show this message") do
    puts opts
    exit
  end

end
opt_parse.parse!

options[:files] += ARGV

if options[:files].length == 0
  abort(opt_parse.help)
end

puts options[:files]

使用此方法,您甚至可以混合使用两种样式:

$ main.rb -f -f file1,file2 file3 -f file4 file5
file1
file2
file4
file3
file5

(注意file5实际上是通过ARGV传递的,但有点像你使用空格作为分隔符。)