2010-01-30 77 views
7

我试图在我的ruby应用程序中获得简单的选项处理。看起来像OptionParser做我想要的大部分,但我无法找到一种方法来优雅地处理意外的论点。为ruby的OptionParser设置默认选项处理程序

如果提供了任何意外的参数,我想将它视为如果-h参数已通过(显示使用情况并退出)。虽然我没有看到任何处理方法。

如果OptionParser不能这样做,是否有另一个库可以用来轻松解析命令行参数?

回答

10

有可能是一个光滑的方式来做到这一点,但我不知道它。我已经做到了这一点:

opts = OptionParser.new 
    ... 
    opts.on_tail("-h", "--help", 
       "Show this message") do 
    puts opts 
    exit 
    end 
    begin  
    opts.parse!(argv) 
    rescue OptionParser::InvalidOption => e 
    puts e 
    puts opts 
    exit(1) 
    end 
+0

这就是我最终做的。它适用于我处理的情况,但我更愿意为任何未明确定义的选项设置通配符回调。 – Herms 2010-01-31 04:32:33

+0

我很好奇,为什么这不适用于任何未明确定义的选项。不会OptionParser总是引发InvalidOption错误? – liquidki 2014-03-02 21:19:33

+0

@liquidki - 我认为_will_会工作,因为OptionParser会为未定义的选项引发一个InvalidOption错误。 – 2014-03-03 04:38:37

0

,如果你低于保存为test.rb

#/usr/bin/env ruby 
require 'optparse' 

test = nil 
help = nil 
ARGV.options {|opt| 
    opt.on("--test=test") {|val| test=val} 
    help = opt.help 
    begin 
    opt.parse! 
    rescue OptionParser::InvalidOption => e 
    puts help 
    end 
} 

,并在终端下面执行,

$./test.rb --foo 

你下面。

Usage: test [options] 
    --test=test