2011-09-18 23 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

謝謝,這幾乎正是我需要的。幾個修改,我會得到它做我想要的。非常感謝。 –