使用 optparse 时读取作为参数传递的文件
Reading a file that is passed as argument while using 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
当您调用 parse!
来解析您的命令行选项时,OptionParser 会从 ARGV
中删除它可以识别的任何内容,留下任何它无法识别的内容供您根据需要进行处理。
在你的例子中,因为你指定了 -f
选项来接受一个参数,所以这两个条目将从 ARGV
中删除。在您的代码中,您将选项存储在 options[:file]
中,因此请检查它而不是 ARGV[1]
.
我正在编写一个需要参数才能成为 运行 的程序,其中一个可能的参数是通过传递程序 -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
当您调用 parse!
来解析您的命令行选项时,OptionParser 会从 ARGV
中删除它可以识别的任何内容,留下任何它无法识别的内容供您根据需要进行处理。
在你的例子中,因为你指定了 -f
选项来接受一个参数,所以这两个条目将从 ARGV
中删除。在您的代码中,您将选项存储在 options[:file]
中,因此请检查它而不是 ARGV[1]
.