读取使用optparse时作为参数传递的文件

时间:2016-04-12 19:38:39

标签: ruby optparse

我正在编写一个需要参数才能运行的程序,其中一个可能的参数是通过传递程序-f <file>来使用文件的选项。我不知道这出错的地方,我试图将文件读作ARGV[1],因为它是给予该程序的第二个参数。

但是,调用ARGV[1]什么都不输出,但是如果我在标志和文件名的基础上再添加两个参数,然后调用ARGV[1]它会输出给定为1的最后一个参数?例如:

ruby testparse.rb -f test.txt
#<= Nothing there

但如果我这样做了:

ruby testparse.rb -f test.txt test ttest
#<= ttest

ARGV[1]放在ARGV[3]的位置?所以我的问题是:

  • 为什么我不能通过optparse传递文件ARGV[1]
  • 如何在使用optparse时调用要读取的文件?

来源:

require 'optparse'

options = {}
OptionParser.new do |opt|
  opt.on('-f=FILE', '--file=FILE', 'File it') { |o| options[:file] = o }
end.parse!

if ARGV[1].nil?
  puts "Nothing there"
else
  puts ARGV[1]
end

1 个答案:

答案 0 :(得分:0)

当您致电parse!来解析命令行选项时,OptionParser将从ARGV中删除它识别的任何内容,并保留任何无法识别的内容供您处理。

在您的情况下,由于您已指定-f选项来获取一个参数,因此这两个条目将从ARGV中删除。在您的代码中,您将该选项存储在options[:file]中,因此请检查该选项而不是ARGV[1]