Suche…


Einführung

Mit OptionParser können Befehlszeilenoptionen von ARGV .

Obligatorische und optionale Befehlszeilenoptionen

Es ist relativ einfach, die Befehlszeile von Hand zu analysieren, wenn Sie nicht nach etwas zu Komplexem suchen:

# 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

Wenn Ihre Optionen jedoch komplizierter werden, müssen Sie wahrscheinlich einen Options-Parser verwenden, z. B. 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!

Es gibt auch eine zerstörungsfreie parse , aber es ist viel weniger nützlich, wenn Sie den Rest des ARGV .

Die OptionParser-Klasse hat keine Möglichkeit, obligatorische Argumente durchzusetzen (wie --site in diesem Fall). Sie können jedoch nach dem parse! selbst prüfen parse! :

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

Einen allgemeineren obligatorischen Handler für Optionen finden Sie in dieser Antwort . Falls dies nicht klar ist, sind alle Optionen optional, es sei denn, Sie tun alles, um sie zur Pflicht zu machen.

Standardwerte

Mit OptionsParser ist es sehr einfach, Standardwerte OptionsParser . Füllen Sie einfach den Hash vor, in dem Sie die Optionen speichern:

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

Wenn Sie den Parser definieren, wird der Standardwert überschrieben, wenn ein Benutzer einen Wert angibt:

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

Lange Beschreibungen

Manchmal kann Ihre Beschreibung sehr lang werden. Zum Beispiel listet irb -h ein Argument auf, das wie irb -h lautet:

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

Es ist nicht sofort klar, wie dies unterstützt werden soll. Die meisten Lösungen müssen angepasst werden, damit die Einrückung der zweiten und der folgenden Zeilen an der ersten ausgerichtet wird. Glücklicherweise unterstützt die on Methode mehrere Beschreibungszeilen, indem sie als separate Argumente hinzugefügt werden:

  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

Sie können beliebig viele Beschreibungszeilen hinzufügen, um die Option vollständig zu erläutern.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow