2011-06-16 10 views
52

Estoy empezando con Groovy. No pude encontrar ningún ejemplo de cómo manejar los argumentos en un script de Groovy, así que pirateé este método yo mismo. Debe haber una mejor manera de hacer esto? Si es así, estoy buscando esta mejor manera, ya que probablemente esté pasando por alto lo obvio.¿Cómo capturar los argumentos pasados ​​a un script de Groovy?

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

Respuesta

29

Si desea análisis más avanzado que sólo tener los argumentos que puede utilizar el maravilloso CliBuilder para ayudarle. Le ayuda con indicadores de línea de comando, argumentos opcionales e impresión de las instrucciones de uso.

Pago CliBuilder 's Javadoc o MrHakis post sobre él.

84

Perdón por hacer la pregunta. Yo sólo lo descubrí:

println args[0] 
println args[1] 
println args[2] 
+0

Funciona perfectamente. No sabía sobre eso. Aquí hay una buena página donde se enumeran todas las capacidades relacionadas con script groovy (incluida la variable args) - http://groovy.codehaus.org/Groovy+CLI –

+1

@MichalBernhard El enlace ya no es válido. –

+0

@Jamil thx para comentarios. Traté de encontrar una nueva ubicación pero sin éxito:/Y parece que la página ni siquiera está disponible a través de la memoria caché de google. –

2

Es muy similar a Java y puede usar la misma sintaxis java. Por ej.

class TestExecutor { 

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

} 

Ejecutar y debería ver los argumentos impresa

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 

También tenga en cuenta si usted no proporciona método principal o proporcione una como en el ejemplo anterior, entonces puede obtener argumentos como args[i] pero se puede cambiar el nombre de la matriz (de nuevo lo mismo que java). Así que puede tener algo como -

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

Dado que no es algo que está codificado. Finalmente, como se sugiere en otra respuesta, siempre puede usar CliBuilder para el análisis inteligente. Pero de nuevo también se usa internamente def options = cli.parse(args).

+0

"// usando args en la parte superior del bucle arrojará un error" - qué args? –

+0

"si no proporciona el método principal o proporcione uno como en el ejemplo anterior, entonces ... pero puede cambiar el nombre de la matriz" - no entiendo. –

+0

@BlessedGeek eso significa que si no proporciona el método principal o proporciona uno con el nombre de la matriz en argumentos como 'args' puede acceder a los argumentos pasados ​​con args [i].Pero si cambia el nombre de la matriz en argumentos de 'main (def args)' a 'main (def argsNew)' que está permitido, ya no puede acceder a los argumentos pasados ​​como 'args [i]' tendrá que usar 'argsNew [ i] 'como se menciona en el código recortado anteriormente. –

13

La más simple es utilizar this.args como una matriz ej .:

test.groovy

println this.args[0] 

Llamar:

C:>groovy test this 

Salida:

this 
2

prueba esto:

args.each{println it} 
Cuestiones relacionadas