Println как аргумент в отличном сценарии - PullRequest
1 голос
/ 24 января 2012

У меня есть один скрипт, который выводит некоторую статистику: println: "..."

теперь у меня есть еще один отличный скрипт, которому нужны эти данные. Можно ли как-нибудь запустить первый скрипт из второго и сохранить эти данные как параметр, а затем работать с ними из второго скрипта? Я просто знаю, как запустить скрипт: с GroovyShell(), а затем run(...), но это не возвращает вывод первого скрипта

Ответы [ 2 ]

2 голосов
/ 24 января 2012

Один из способов сделать это - установить параметр out в привязке при вызове первого сценария:

Итак, с учетом сценария s1.groovy:

//Print the letters of 'tim_yates', one per line
'tim_yates'.each this.&println

Мы можем сделать (в s2.groovy)

// Create a StringWriter that will capture output
String output = new StringWriter().with { sw ->
  // And make a Binding for our script
  new Binding().with { b ->
    // Set 'out' in the Binding to be our StringWriter
    b[ 'out' ] = sw
    // evaluate the file with the GroovyShell (using the binding)
    new GroovyShell( b ).evaluate( new File( 's1.groovy' ) )
  }
  // And return the String captured in our writer
  sw.toString()
}

println output

А затем запустите его с groovy s2.groovy

Редактировать

Я думаю, что это вариант № 1 в ответе Дейва ...

2 голосов
/ 24 января 2012

Несколько вариантов:

  1. Если вы вызываете его из скрипта, переопределите stdout.
  2. Исправьте первый скрипт, чтобы он печатал данные, полученные из класса,и переписать вызывающий сценарий, чтобы использовать этот класс, вместо того, чтобы полагаться на печатный вывод первого.Долгосрочный может быть лучшим вариантом.
  3. Использовать канал в командной строке: groovy s1.groovy | groovy s2.groovy

Лично, когда я сочиняю вещи, которые делают вещи с помощью stdin / stdio, я предпочитаюпоследний метод.Пример:

s1.groovy

5.times { println it }

s2.groovy

r = new BufferedReader(new InputStreamReader(System.in))
while (l = r.readLine()) { println((l as Integer) * 2) }

Выход

$ groovy s1.groovy 
0
1
2
3
4
$ groovy s1.groovy | groovy s2.groovy 
0
2
4
6
8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...