2011-09-18 4 views
2

내 프로그램에는 많은 명령 행 옵션이 있습니다. 하지만 그가 --help을 입력 할 때 사용자를 압도하고 싶지는 않습니다. 모든 옵션을 인쇄하는 대신 가장 중요한 옵션 만 나열하고 나머지는 --help=full 일 때 인쇄하십시오.Ruby OptionParser를 사용하는 일부 옵션의 목록 인쇄

그러나 OptionParser은 정의 된 옵션의 전체 목록 인쇄 만 지원하는 것으로 보입니다. 정의 된 옵션을 반복하고 내 방식으로 출력하는 코드를 작성하고 싶지만 OptionParser는 포함 된 옵션 정의에 액세스 할 수있는 방법을 제공하지 않습니다.

누락 된 OptionParser의 옵션에 액세스하는 방법이 있습니까? 아니면 OptionParser에 대한 좋은 대안이 있습니까? 아니면이 문제에 대한 다른 접근법이 있습니까?

답변

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. 직접 선택하거나 완전히 다른 도움을받을 수 있습니다.

+0

감사합니다. 이것은 거의 정확하게 필요한 것입니다. 몇 가지 수정 작업을 통해 원하는대로 할 수 있습니다. 고마워. –

관련 문제