Println作为groovy脚本中的参数

时间:2012-01-24 15:29:03

标签: groovy

我有一个groovy脚本打印一些统计信息:println:“...”

现在我有另一个需要这些数据的groovy脚本。有可能以某种方式从第二个脚本运行第一个脚本并将此数据保存为参数,然后从第二个脚本中使用它们吗?我只知道如何运行脚本:使用GroovyShell()然后run(...)但这不会返回第一个脚本的输出

2 个答案:

答案 0 :(得分:2)

一些选择:

  1. 如果您是通过脚本调用它,请重新定义stdout
  2. 修复第一个脚本,使其打印从类中检索的数据,然后重新编写调用脚本以使用该类,而不是依赖第一个脚本的打印输出。长期可能是最好的选择。
  3. 在命令行上使用管道:groovy s1.groovy | groovy s2.groovy
  4. 就个人而言,在编写使用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
    

答案 1 :(得分:2)

执行此操作的一种方法是在调用第一个脚本时在绑定中设置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

运行它

修改

我认为这是戴夫答案的第一选择......