web-dev-qa-db-fra.com

Comment capturer des arguments passés à un script Groovy?

Je viens juste de commencer avec Groovy. Je ne trouvais nulle part où que ce soit des exemples montrant comment gérer les arguments d'un script Groovy et j'ai donc piraté cette méthode moi-même. Il doit y avoir une meilleure façon de faire cela? Si tel est le cas, je cherche cette meilleure solution, car je passe probablement de côté l’évidence.

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")
64
djangofan

Si vous souhaitez une analyse plus avancée que la simple obtention des arguments, vous pouvez utiliser Groovy CliBuilder pour vous aider. Il vous aide avec les indicateurs de ligne de commande, les arguments facultatifs et l’impression des instructions d’utilisation.

Commander CliBuilder Javadoc ou MrHakis post à ce sujet.

33
xlson

Désolé d'avoir posé la question. Je viens de le comprendre:

println args[0]
println args[1]
println args[2]
98
djangofan

Le plus simple consiste simplement à utiliser this.args sous forme de tableau, par exemple:

test.groovy

println this.args[0]

Appel:

C:>groovy test this

Sortie:

this
16
paulkav1

essaye ça:

args.each{println it}
5
Zak

Il ressemble beaucoup à Java et vous pouvez utiliser la même syntaxe Java. Par exemple.

class TestExecutor {

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

} 

Exécutez-le et vous devriez voir les arguments imprimés

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

Notez également que si vous ne fournissez pas la méthode principale ou une méthode semblable à celle de l'exemple ci-dessus, vous pouvez obtenir les arguments sous la forme args[i], Mais vous pouvez modifier le nom du tableau (de nouveau identique à Java). Donc, vous pouvez avoir quelque chose comme -

public static void main(def argsNew) {
    println("Printing arguments");
    for(String arguments : argsNew) {
        //using args in above for loop will throw error
        println (arguments);
    }
}

Le point étant que ce n'est pas quelque chose qui est codé en dur. Enfin, comme suggéré dans une autre réponse, vous pouvez toujours utiliser CliBuilder pour l'analyse intelligente. Mais là encore, il utilisait en interne def options = cli.parse(args).

2
Aniket Thakur