我有一个ruby脚本,它解析给它的命令行选项,如下所示:
#!/usr/bin/ruby
require 'optparse'
puts 'Hello World!, This is my first ruby program'
options = {}
optparse = OptionParser.new do|opts|
opts.banner = "Featbuild minimal trial script for command line parsing"
options[:cpl] = nil
opts.on('-cpl SWITCH_STATE', 'compile on or off') do|cplopt|
options[:cpl] = cplopt
OPT_CPL=cplopt
puts cplopt
end
opts.on('-h', '--help', 'Display this screen') do
puts opts
exit
end
end
optparse.parse!
output = open("mypipe", "w+")
output.puts OPT_CPL
#output.flush
现在上面脚本中的行opts.on('-cpl SWITCH_STATE', 'compile on or off') do|cplopt|
是我遇到问题的地方。
我相信我们可以通过以下方式实现这一目标:
1。)opts.on('--cpl SWITCH_STATE', 'compile on or off') do|cplopt|
2)opts.on('-c', '--cpl SWITCH_STATE', 'compile on or off') do|cplopt|
3)opts.on('-cpl SWITCH_STATE', 'compile on or off') do|cplopt|
这是我传递的有效论据:
$./try1.rb --cpl on
$./try1.rb -c on
这不起作用: <。/ try1.rb -cpl on
Ruby,而不是'on'作为选项参数,得到'pl',就像指定了$./try.rb -c pl
一样。
我希望解析字符串$./try1.rb -cpl on
,以便将'on'
传递给opts.on()
中方法'cplopt'
的块。
我指的是这个教程:http://ruby.about.com/od/advancedruby/a/optionparser2.htm
似乎'-cpl on'
在Ruby中是不可能的?是这样吗?
我可以在这里申请哪些其他替代解决方案?
答案 0 :(得分:1)
尝试Trollop,因为它使选项解析生活更轻松。
require 'trollop'
opts = Trollop::options do
version "compile 0.1.0"
banner "Usage: compile <option> - where [options] are:"
opt :cpl, "compile on or off", :type => :string, :default => "off"
end
puts opts.cpl
运行时,结果为:
$ ruby ./trollop.rb --cpl on
on
$ ruby ./trollop.rb --cpl off
off
$ ruby ./trollop.rb -c on
on
$ ruby ./trollop.rb -c off
off
$ ruby ./trollop.rb
off
Trollop 2.0支持no-
negation of boolean options,您可能会发现它比处理on/off
字符串更容易。
opt "cpl", "Compile", :default => true
运行时,结果为:
$ ruby trollop.rb --cpl
true
$ ruby trollop.rb --no-cpl
false
答案 1 :(得分:1)
我认为您需要确保只有cp1在单引号中而不是
-cpl SWITCH_STATE
DO
opts.on('-cpl', 'compile on or off') do|cplopt|
options[:cpl] = cplopt
OPT_CPL=cplopt
puts cplopt
end
以下是一个例子:
opts.on('-s', '--size 1G or 1024M', '1G or 1024M') do |s|
options[:size] = s;
end