2011-06-16 11 views
52

私はGroovyを使い始めました。 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") 

答えて

29

あなたはちょうどあなたがあなたを助けるためにGroovyのCliBuilderを使用することができ、引数を取得するよりも、より高度な解析をしたい場合。これは、コマンドラインフラグ、オプションの引数、および使用法の指示に役立ちます。

チェックアウトCliBuilderのJavadocまたはMrHakis postです。

84

ご質問いただきまして申し訳ございません。私はちょうどそれを考え出した:

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

完璧に動作します。私はそれについて知らなかった。以下は、groovyスクリプト関連のすべての機能(args変数を含む)がリストされた良いページです - http://groovy.codehaus.org/Groovy+CLI –

+1

@MichalBernhardリンクはもう有効ではありません。 –

+0

フィードバックのための@Jamil thx。私は新しい場所を見つけようとしましたが、成功しませんでした:/そしてそのページはGoogleキャッシュでも利用できないようです。 –

2

これはJavaと非常によく似ており、同じjava構文を使用できます。たとえば。

class TestExecutor { 

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

} 

実行して、あなたが主な方法を提供したり、上記の例のようなものを提供し、あなたがargs[i]として引数を取得することができますが、変更することができていない場合も

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 

を印刷引数は注意して見るべきです配列の名前(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)を使用しました。

+0

"//上記のループでargsを使用するとエラーがスローされます。 args? –

+0

"あなたがメインの方法を提供していない場合、または上の例のようなものを提供しても、配列の名前を変更することができます。" - 分かりません。 –

+0

@ BlessedGeekというのは、メインメソッドを提供しないか、argsにargs [i]で渡された引数にアクセスできるように、引数に配列名を渡すことを意味します。しかし、引数の配列名を 'main(def args)'から 'main(def argsNew)'に変更すると、 'args [i]'として渡された引数にアクセスすることができなくなります。 'argsNew [ i] 'のように記述します。 –

13

だけ配列例えば:

test.groovyとしてthis.argsを使用している最も簡単な

println this.args[0] 

コール:

C:>groovy test this 

出力:

this 
2

これを試してください:

args.each{println it} 
関連する問題