使用ruby的OptionParser来解析子命令

ram*_*ion 24 ruby optparse optionparser

我希望能够使用ruby的OptionParser来解析表单的子命令

COMMAND [GLOBAL FLAGS] [SUB-COMMAND [SUB-COMMAND FLAGS]]
Run Code Online (Sandbox Code Playgroud)

喜欢:

git branch -a
gem list foo
Run Code Online (Sandbox Code Playgroud)

我知道我可以切换到一个不同的选项解析器库(如Trollop),但我有兴趣从OptionParser中学习如何做到这一点,因为我想更好地学习库.

有小费吗?

ram*_*ion 39

弄清楚了.我需要用OptionParser#order!.它将从一开始就解析所有选项,ARGV直到找到非选项(不是选项参数),删除它处理的所有内容ARGV,然后它将退出.

所以我只需要做一些事情:

global = OptionParser.new do |opts|
  # ...
end
subcommands = { 
  'foo' => OptionParser.new do |opts|
     # ...
   end,
   # ...
   'baz' => OptionParser.new do |opts|
     # ...
   end
 }

 global.order!
 subcommands[ARGV.shift].order!
Run Code Online (Sandbox Code Playgroud)

  • 作为参考,在[Gist](https://gist.github.com/rkumar/445735)中有一个更完整的例子. (4认同)