2011-06-16 20 views
52

Właśnie zaczynam z Groovy. Nie mogłem znaleźć żadnego przykładu, jak poradzić sobie z argumentami skryptu Groovy, więc samodzielnie zhackowałem tę metodę. Musi być lepszy sposób na zrobienie tego? Jeśli tak, szukam tego lepszego sposobu, ponieważ prawdopodobnie przeoczyłem oczywistość.Jak przechwytywać argumenty przekazywane do skryptu 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") 

Odpowiedz

29

Jeśli chcesz bardziej zaawansowane niż tylko coraz analizowania argumentów można użyć Groovy CliBuilder pomóc. Pomaga ci z flagami linii poleceń, opcjonalnymi argumentami i drukowaniem instrukcji użytkowania.

Zamówienie CliBuilder - Javadoc lub MrHakis post o tym.

84

Przepraszamy za zadawanie pytań. Właśnie zorientowaliśmy się:

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

Działa idealnie. Nie wiedziałem o tym. Oto dobra strona, na której wymienione są wszystkie funkcje związane z skryptami groovy (w tym zmienna args) - http://groovy.codehaus.org/Groovy+CLI –

+1

@MichalBernhard Link nie jest już ważny. –

+0

@ Jamam thx o opinie. Próbowałem znaleźć nową lokalizację, ale bez powodzenia:/I wygląda na to, że strona nie jest dostępna nawet przez Google Cache. –

2

Jest bardzo podobny do języka Java i można używać tej samej składni języka Java. Na przykład

class TestExecutor { 

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

} 

uruchom go i powinny być widoczne argumenty drukowane

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 

również pamiętać, jeśli nie zapewniają metody głównego lub dostarczyć jeden jak w powyższym przykładzie, a następnie można uzyskać argumenty args[i] ale można zmienić nazwa tablicy (znowu taka sama jak java). Możesz więc mieć coś w rodzaju -

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

Nie oznacza to, że nie jest on zakodowany na stałe. Wreszcie, jak zasugerowano w innej odpowiedzi, zawsze można użyć CliBuilder do inteligentnego parsowania. Ale znowu w tym też wewnętrznie używane def options = cli.parse(args).

+0

"// używając argumentów w powyższej pętli spowoduje błąd" - co args? –

+0

"jeśli nie zapewnisz głównej metody ani nie podasz takiej, jak w powyższym przykładzie, to ... ale możesz zmienić nazwę tablicy" - nie rozumiem. –

+0

@BlessedGeek oznacza, że ​​jeśli nie podajesz głównej metody lub nie podajesz jej nazwy w argumentach jako 'args', możesz uzyskać dostęp do argumentów przekazanych za pomocą args [i].Ale jeśli zmienisz nazwę tablicy w argumentach z 'main (def args)' na 'main (def argsNew)', co jest dozwolone, nie możesz już uzyskać dostępu do argumentów przekazanych jako 'args [i]' będziesz musiał użyć 'argsNew [ i] 'jak wspomniano w powyższym kodzie. –

13

Najprościej jest po prostu użyć this.args jako tablica np .:

test.groovy

println this.args[0] 

Call:

C:>groovy test this 

wyjściowa:

this 
2

spróbuj tego:

args.each{println it} 
Powiązane problemy