Wie erfasst man Argumente, die an ein Groovy-Skript übergeben werden?

Lesezeit: 4 Minuten

Benutzer-Avatar
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]

Benutzer-Avatar
xlson

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.

Kasse CliBuilder‘s Javadoc oder MrHakis Post darüber.

Benutzer-Avatar
paulkav1

Am einfachsten ist es einfach zu verwenden this.args als Array zB:

test.groovy

println this.args[0]

Anruf:

C:>groovy test this

Ausgabe:

this

Benutzer-Avatar
Zak

Versuche dies:

args.each{println it}

Es ist Java sehr ähnlich und Sie können dieselbe Java-Syntax verwenden. Für zB.

class TestExecutor {

    public static void main(def args) {
        println("Printing arguments");
        for(String arguments : args) {
            println (arguments);
        }
    }

} 

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

Benutzer-Avatar
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.


Verweise:

https://stackoverflow.com/a/53783178/2089675

https://groovy-lang.org/structure.html#_variables

  • “//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

1233670cookie-checkWie erfasst man Argumente, die an ein Groovy-Skript übergeben werden?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy