Wie erfasst man Argumente, die an ein Groovy-Skript übergeben werden?
Lesezeit: 4 Minuten
djangofan
Ich fange gerade erst mit Groovy an. Ich konnte nirgendwo Beispiele finden, wie Argumente in einem Groovy-Skript behandelt werden, und so habe ich diese Methode selbst gehackt. Es muss einen besseren Weg geben, dies zu tun? Wenn ja, suche ich nach diesem besseren Weg, da ich wahrscheinlich das Offensichtliche übersehe.
import groovy.lang.Binding;
Binding binding = new Binding();
int x = 1
for (a in this.args) {
println("arg$x: " + a)
binding.setProperty("arg$x", a);
x=x+1
}
println binding.getProperty("arg1")
println binding.getProperty("arg2")
println binding.getProperty("arg3")
Entschuldigung, dass ich die Frage gestellt habe. Ich habe es gerade herausgefunden:
println args[0]
println args[1]
println args[2]
Funktioniert perfekt. Ich wusste nichts davon. Hier ist eine gute Seite, auf der alle Funktionen im Zusammenhang mit Groovy-Skripten aufgelistet sind (einschließlich der Variablen args) – groovy.codehaus.org/Groovy+CLI
Wenn Sie eine fortgeschrittenere Analyse als nur das Abrufen der Argumente wünschen, können Sie den Groovy CliBuilder verwenden, um Ihnen zu helfen. Es hilft Ihnen mit Befehlszeilen-Flags, optionalen Argumenten und dem Drucken der Gebrauchsanweisung.
Führen Sie es aus und Sie sollten die ausgegebenen Argumente sehen
C:\Users\athakur\Desktop>groovy TestExecutor.groovy test1 test2 test3
Aug 16, 2014 11:47:56 AM org.codehaus.groovy.runtime.m12n.MetaInfExtensionModule
newModule
WARNING: Module [groovy-nio] - Unable to load extension class [org.codehaus.groo
vy.runtime.NioGroovyMethods]
Printing arguments
test1
test2
test3
Beachten Sie auch, wenn Sie keine Hauptmethode oder eine wie im obigen Beispiel angeben, können Sie Argumente als erhalten args[i] aber Sie können den Namen des Arrays ändern (wieder dasselbe wie Java). Sie können also etwas haben wie –
public static void main(def argsNew) {
println("Printing arguments");
for(String arguments : argsNew) {
//using args in above for loop will throw error
println (arguments);
}
}
Der Punkt ist, dass es nicht etwas ist, das fest codiert ist. Schließlich können Sie, wie in der anderen Antwort vorgeschlagen, immer verwenden CliBuilder für intelligentes Parsing. Aber auch darin wird es intern verwendet def options = cli.parse(args).
“//die Verwendung von Argumenten in der obigen For-Schleife löst einen Fehler aus” – welche Argumente?
– Gesegneter Aussenseiter
28. Juli 2015 um 23:02 Uhr
“Wenn Sie keine Hauptmethode oder eine wie im obigen Beispiel angeben, dann … aber Sie können den Namen des Arrays ändern” – verstehe nicht.
– Gesegneter Aussenseiter
28. Juli 2015 um 23:06 Uhr
@BlessedGeek das bedeutet, wenn Sie keine Hauptmethode angeben oder eine mit Array-Namen in Argumenten als angeben args Sie können auf die mit args übergebenen Argumente zugreifen[i]. Aber wenn Sie den Array-Namen in Argumenten von ändern main(def args) zu main(def argsNew) was erlaubt ist, können Sie nicht mehr auf übergebene Argumente zugreifen args[i] Sie müssen verwenden argsNew[i] wie im oben geschnippelten Code erwähnt.
– Aniket Thakur
29. Juli 2015 um 6:11 Uhr
smac89
Wenn Sie Ihr Skript mit ausführen --compile-static oder --type-checked Möglichkeit, die args Variable wird nicht sichtbar sein und daher gibt die Kompilierung einen Fehler aus:
[Static type checking] – Die Variable [args] ist nicht deklariert.
Ich mache am Anfang des Skripts gerne Folgendes:
import groovy.transform.Field
@Field String[] args = binding.getVariable('args') as String[]
Dies wird aussetzen args als globale Variable, die überall im Skript verwendet werden kann.
“//die Verwendung von Argumenten in der obigen For-Schleife löst einen Fehler aus” – welche Argumente?
– Gesegneter Aussenseiter
28. Juli 2015 um 23:02 Uhr
“Wenn Sie keine Hauptmethode oder eine wie im obigen Beispiel angeben, dann … aber Sie können den Namen des Arrays ändern” – verstehe nicht.
– Gesegneter Aussenseiter
28. Juli 2015 um 23:06 Uhr
@BlessedGeek das bedeutet, wenn Sie keine Hauptmethode angeben oder eine mit Array-Namen in Argumenten als angeben args Sie können auf die mit args übergebenen Argumente zugreifen[i]. Aber wenn Sie den Array-Namen in Argumenten von ändern main(def args) zu main(def argsNew) was erlaubt ist, können Sie nicht mehr auf übergebene Argumente zugreifen args[i] Sie müssen verwenden argsNew[i] wie im oben geschnippelten Code erwähnt.
– Aniket Thakur
29. Juli 2015 um 6:11 Uhr
12336700cookie-checkWie erfasst man Argumente, die an ein Groovy-Skript übergeben werden?yes