如何捕获传递给Groovy脚本的参数?

时间:2011-06-16 05:15:03

标签: java groovy command-line-arguments command-line-parsing

我刚开始使用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")

6 个答案:

答案 0 :(得分:95)

很抱歉提问。我只是想通了:

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

答案 1 :(得分:33)

如果您想获得更高级的解析而不仅仅是获取参数,您可以使用Groovy CliBuilder来帮助您。它可以帮助您使用命令行标志,可选参数和打印使用说明。

结帐CliBuilder的Javadoc或MrHakis post

答案 2 :(得分:15)

最简单的方法是将this.args用作数组,例如:

<强> test.groovy

println this.args[0]

呼叫:

C:>groovy test this

输出:

this

答案 3 :(得分:5)

试试这个:

args.each{println it}

答案 4 :(得分:2)

它与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)

答案 5 :(得分:0)

如果使用--compile-static--type-checked选项运行脚本,则args变量将不可见,因此编译会引发错误:

[静态类型检查]-未声明变量[args]。

我喜欢在脚本顶部执行以下操作:

import groovy.transform.Field

@Field String[] args = binding.getVariable('args') as String[]

这会将args作为全局变量公开,可以在脚本中的任何地方使用。


参考文献:

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

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