Как захватить аргументы, передаваемые в Groovy-скрипт - PullRequest
64 голосов
/ 16 июня 2011

Я только начинаю с Groovy.Я нигде не смог найти примеров того, как обрабатывать аргументы скрипта 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")

Ответы [ 5 ]

96 голосов
/ 16 июня 2011

Извините за вопрос.Я только что понял:

println args[0]
println args[1]
println args[2]
33 голосов
/ 17 июня 2011

Если вам нужен более сложный анализ, чем просто получение аргументов, вы можете использовать Groovy CliBuilder, чтобы помочь вам.Это поможет вам с флагами командной строки, необязательными аргументами и распечаткой инструкции по использованию.

Оформление заказа CliBuilder Javadoc или MrHakis post об этом.

16 голосов
/ 01 апреля 2015

Самое простое - просто использовать this.args в качестве массива, например ::100100

test.groovy

println this.args[0]

Звоните:

C:>groovy test this

Выход:

this
5 голосов
/ 08 августа 2016

попробуйте это:

args.each{println it}
2 голосов
/ 16 августа 2014

Это очень похоже на Java, и вы можете использовать тот же синтаксис Java. Например,

class TestExecutor {

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

} 

Запустите его, и вы должны увидеть напечатанные аргументы

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

Также обратите внимание, что если вы не предоставите метод main или не предоставите его, как в примере выше, тогда вы можете получить аргументы как args[i], но вы можете изменить имя массива (опять же, как в java). Так что вы можете иметь что-то вроде -

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

Дело в том, что это не то, что жестко запрограммировано. Наконец, как предлагается в другом ответе, вы всегда можете использовать CliBuilder для интеллектуального анализа. Но опять же в этом он также использовал внутренне def options = cli.parse(args).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...