我正在尝试学习如何使用optparse来接受命令行选项,但是我很难让它运行,因为它在类文档和我可以在网上找到的任何示例中显示。特别是当我通过-h选项时,没有任何东西出现。我可以输出ARGV并显示它接收-h但它不会显示opts.banner和/或任何选项。我在这里缺少什么?
class TestThing
def self.parse(args)
options = {}
options[:time] = 0
options[:operation] = :add
options[:input_file] = ARGV[-2]
options[:output_file] = ARGV[-1]
optparse = OptionParser.new do |opts|
opts.banner = "Usage:[OPTIONS] input_file output_file"
opts.separator = ""
opts.separator = "Specific Options:"
opts.on('-o', '--operation [OPERATION]', "Add or Subtract time, use 'add' or 'sub'") do |operation|
optopns[:operation] = operation.to_sym
end
opts.on('-t', '--time [TIME]', "Time to be shifted, in milliseconds") do |time|
options[:time] = time
end
opts.on_tail("-h", "--help", "Display help screen") do
puts opts
exit
end
opt_parser.parse!(args)
options
end
end
end
答案 0 :(得分:0)
您需要保留OptionParser.new
的结果,然后在其上调用parse!
:
op = OptionParser.new do
# what you have now
end
op.parse!
请注意,您需要在提供给new
的区块之外执行此操作,如下所示:
class TestThing
def self.parse(args)
options = {}
options[:time] = 0
options[:operation] = :add
options[:input_file] = ARGV[-2]
options[:output_file] = ARGV[-1]
optparse = OptionParser.new do |opts|
opts.banner = "Usage:[OPTIONS] input_file output_file"
# all the rest of your app
end
optparse.parse!(args)
end
end
(我留下了你的缩进,使我的意思更加清晰,但在旁注中,如果你持续缩进,你会发现代码更容易使用。)
此外,您无需添加-h
和--help
- OptionParser
会自动为您提供这些内容,并完全按照您的要求执行操作。