Sök…


Introduktion

OptionParser kan användas för att analysera kommandoradsalternativ från ARGV .

Obligatoriska och valfria kommandoradalternativ

Det är relativt enkelt att analysera kommandoraden för hand om du inte letar efter något för komplicerat:

# Naive error checking
abort('Usage: ' + $0 + ' site id ...') unless ARGV.length >= 2

# First item (site) is mandatory
site = ARGV.shift

ARGV.each do | id |
  # Do something interesting with each of the ids
end

Men när dina alternativ börjar bli mer komplicerade, kommer du antagligen att behöva använda en alternativ parser som, ja , OptionParser :

require 'optparse'

# The actual options will be stored in this hash
options = {}

# Set up the options you are looking for
optparse = OptionParser.new do |opts|
  opts.banner = "Usage: #{$0} -s NAME id ..."

  opts.on("-s", "--site NAME", "Site name") do |s|
    options[:site] = s
  end

  opts.on( '-h', '--help', 'Display this screen' ) do
    puts opts
    exit
  end
end

# The parse! method also removes any options it finds from ARGV.
optparse.parse!

Det finns också en icke-destruktiv parse , men det är mycket mindre användbart om du planerar att använda resten av vad som finns i ARGV .

OptionParser-klassen har inget sätt att verkställa obligatoriska argument (t.ex. - --site i detta fall). Men du kan göra din egen kontroll efter att ha kört parse! :

# Slightly more sophisticated error checking
if options[:site].nil? or ARGV.length == 0
  abort(optparse.help)
end

För en mer generisk obligatorisk alternativshanterare, se detta svar . Om det inte är klart är alla alternativ valfria såvida du inte går ur vägen för att göra dem obligatoriska.

Ursprungliga värden

Med OptionsParser är det verkligen enkelt att ställa in standardvärden. Fyll bara på den hash du lagrar alternativen i:

options = {
  :directory => ENV['HOME']
}

När du definierar parsern kommer den att skriva över standardinställningen om en användare tillhandahåller ett värde:

OptionParser.new do |opts|
  opts.on("-d", "--directory HOME", "Directory to use") do |d|
    options[:directory] = d
  end
end

Långa beskrivningar

Ibland kan din beskrivning bli ganska lång. Till exempel irb -h listor på argument som lyder:

  --context-mode n  Set n[0-3] to method to create Binding Object,
                    when new workspace was created

Det är inte direkt klart hur man stöder detta. De flesta lösningar kräver justering för att göra indragningen av den andra och följande rader anpassade till den första. Lyckligtvis stöder on metoden flera beskrivningsrader genom att lägga till dem som separata argument:

  opts.on("--context-mode n",
          "Set n[0-3] to method to create Binding Object,",
          "when new workspace was created") do |n|
    optons[:context_mode] = n
  end

Du kan lägga till så många beskrivningsrader som du vill för att helt förklara alternativet.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow