【问题标题】:Printing list of only some options using Ruby OptionParser使用 Ruby OptionParser 仅打印一些选项的列表
【发布时间】:2011-09-18 18:49:31
【问题描述】:

我的程序有很多命令行选项。但我不想在用户输入--help 时让他不知所措。我不想打印出所有选项,而是只列出最重要的选项,当键入 --help=full 时打印其余选项。

OptionParser 似乎只支持打印已定义选项的整个列表。我想编写自己的代码来循环定义的选项并以我的方式打印出来,但 OptionParser 似乎没有提供任何方法来访问它包含的选项定义。

有没有办法访问我可能错过的 OptionParser 中的选项?或者有什么比 OptionParser 更好的选择吗?或者其他解决这个问题的方法?

【问题讨论】:

    标签: ruby command-line-arguments optparse


    【解决方案1】:

    您可以根据需要重新定义选项--help

    require 'optparse'
    
    #create parsers
    opts = OptionParser.new()
    opts.banner = "Usage: example.rb [options]"
    opts.separator("test optparse with --help[=full]")
    opts.on("-v", "--[no-]verbose", "Run verbosely") { |v|
      puts "->Verbose ist #{v.inspect}"
    }
    opts.on("-r", "--repeat REPEAT", "Repeat REPEAT times") { |v|
      puts "->Repeat ist #{v.inspect}"
    }
    
    #Define your own --help
    opts.on("-h", "--help [HELP]", "Help") { |v|
      case v
        when 'full' #write original help
          puts opts.help
        when nil, '' #write script specific help
          puts opts.banner 
          opts.summarize([], opts.summary_width ) { |helpline| 
            #make your own decision on each helpline
            #~ puts helpline #puts each line
            puts helpline unless helpline =~ /-v/ #ignore -v
          }
        else
          puts opts.banner 
          puts <<helpmessage
    Undefined --help option. Please use 'full' or no option
      #{File.basename(__FILE__)} --help
      #{File.basename(__FILE__)} --help=full
    helpmessage
      end
    }
    
    opts.parse!
    

    在此版本中,--help 显示所有选项,但不显示 -v。您可以自己选择 - 或编写完全不同的帮助。

    【讨论】:

    • 谢谢,这几乎正是我所需要的。很少修改,我会得到它做我想做的事。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 2016-12-10
    • 2019-11-20
    • 1970-01-01
    • 2017-08-28
    相关资源
    最近更新 更多