2

私のプログラムにはたくさんのコマンドラインオプションがあります。しかし、ユーザーが入力するときにユーザーを圧倒したくありません--help。すべてのオプションを印刷するのではなく、最も重要なオプションのみをリストし、1つ入力したときに残りのオプションを印刷したいと思います--help=full

ただし、OptionParserは、定義されたオプションのリスト全体の印刷のみをサポートしているようです。定義されたオプションをループして自分のやり方で出力する独自のコードを書きたいのですが、OptionParserには含まれているオプション定義にアクセスする方法がないようです。

見逃した可能性のあるOptionParserのオプションにアクセスする方法はありますか?または、OptionParserに代わる良い方法はありますか?または、この問題に対する他のアプローチはありますか?

4

1 に答える 1

3

必要に応じてオプション--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。あなたはあなた自身の選択をするかもしれません-あるいは完全に異なるヘルプを書くかもしれません。

于 2011-09-18T20:08:40.920 に答える