Optparse似乎没有返回ARGV阵列。参数必需错误

时间:2014-11-10 22:19:08

标签: ruby optparse

这是家庭作业,我不指望你给我完整的答案。

我正在尝试解析命令行条目,例如:

 ./apacheReport.rb -u testlog.txt 

当我输入时:

./apacheReport.rb -u testlog.txt 

我明白了:

Argument required

我的代码是:

require_relative 'CommonLog'
require 'optparse'

# puts ARGV.inspect

optparser = OptionParser.new

optU = false
optI = false
optS = false
optH = false

optparser.banner = "apacheReport.rb [options] filename"

        optparser.parse!
rescue => m
        puts m.message
        puts optparser
        exit
end

if ARGV.length < 1
        puts  "Argument required"
        exit
end

userInputFile = ARGV[0]
userInputFile.to_s
file = CommonLog.new(userInputFile)

它应该将命令的剩余部分解析为ARGV[0],然后将其存储为userInputFile,然后使用该文件作为构造函数创建CommonLog对象。此时,我调用命令中指定的方法。

似乎由于某种原因,我的ARGV没有被退回。我不确定是什么问题。

2 个答案:

答案 0 :(得分:0)

Ruby的OptionParser易于使用,但您必须通过文档来解决问题。这是一个对您的代码有用的小例子:

require 'optparse'

options = {}
OptionParser.new do |opt|
  opt.on('-u', '--use_this FILE', 'Use this file') { |o| options[:use_this] = o }
end.parse!

options将包含标志。在这种情况下,如果您传入-u foo,则options[:use_this]将为foo

保存并尝试在没有参数的情况下运行它。还可以尝试使用-h标志运行它。

您可以search StackOverflow获取有关我处理OptionParser的更多答案。

答案 1 :(得分:0)

由于您的代码目前似乎无法正常工作,因此很难分辨出错误。问题可能是the parse! methodARGV中删除了找到的选项。所以当你写:

optparser.parse!

它删除了两个参数(-u testlog.txt),此代码始终失败:

if ARGV.length < 1
        puts  "Argument required"
        exit
end

您需要正确设置ARGV,而不是查看optparser。也许是这样的事情:

optparser = OptionParser.new do |opts|
  opts.banner = "apacheReport.rb [options] filename"
  opts.on("-u", "--u-short-for-this", "Whatever u stands for") do |u|
    optU = u
  end
end

只有当用户通过optU并且文件名将位于-u时,ARGV[0]才会成立。