2016-05-02 1 views
-1

Ich erweitere eine Klasse, die OptionParser verwendet, um Befehlszeilenoptionen zu analysieren.Wie verschiebe ich ARGV nach OptionParser?

Ich möchte meine Klasse die Argumente verbleibenden nach die letzte Option verarbeiten. Gibt es in Ruby ein Äquivalent zu optind für die Anrufer von getopt(3) in C?

Einige Weg zur Bestimmung, wie viele Optionen wurden in ARGV gefunden - so kann ich shift durch diese viele die Optionen und Prozess nur die Argumente überspringen?

Ich habe zum Beispiel Zugriff auf das Objekt opt_parser. Kann ich vielleicht daraus herausfinden, wie viele Teile meiner ARGV es verbraucht?

+1

Bitte lesen Sie "[mcve]". Ihre Frage muss das Problem besser definieren. Zeigen Sie uns im Code zusammen mit einem Beispielaufruf, was Ihre Ausgabe sein soll. –

Antwort

1

Ich verstehe Ihre Frage nicht, können Sie ein minimales Beispiel hinzufügen, um Ihr Problem zu zeigen.

Wenn ich diese minimal Beispiel mit den Optionen laufen -v test:

require 'optparse' 

#Anlegen des Parsers 
opts = OptionParser.new() 
opts.on("-v", "--[no-]verbose", "Run verbosely") { |v| 
    puts "->Verbose is #{v.inspect}" 
} 

opts.parse! 

puts "Remaining ARGV: %s" % ARGV.inspect 

dann bekomme ich das Ergebnis

->Verbose is true 
Remaining ARGV: ["test"] 

Nachdem Sie die Optionen analysieren, ARGV die restlichen Argumente enthält.

+0

Sie haben wahrscheinlich Recht - anscheinend, die zugrunde liegende Klasse, die ich benutze - 'Sensu :: Plugin :: Check :: CLI - macht eine Kopie von' ARGV', bevor es OptionParser übergeben. Aber, ich fand, ich kann die verarbeitete Liste (mit Optionen entfernt) als "argv" (Kleinbuchstaben) bekommen, also mir geht es gut ... Wünschte, ich könnte die Frage löschen, aber ich kann nicht ... –

+0

Gibt es unter den Badges keine Löschoption? Normalerweise ist es dem Fragesteller möglich, seine eigene Frage zu löschen. – knut

+0

Als ich diesen Kommentar gepostet habe, funktionierte die Löschung nicht, weil die Frage bereits beantwortet wurde. Jetzt, anstatt die Löschung direkt zu verbieten, warnt die Seite, dass wiederholtes Löschen beantworteter Fragen mich zu einer schlechten Person machen wird. Etwas muss sich in dieser kurzen Zeit verändert haben ... –