我有一个groovy脚本打印一些统计信息:println:“...”
现在我有另一个需要这些数据的groovy脚本。有可能以某种方式从第二个脚本运行第一个脚本并将此数据保存为参数,然后从第二个脚本中使用它们吗?我只知道如何运行脚本:使用GroovyShell()
然后run(...)
但这不会返回第一个脚本的输出
答案 0 :(得分:2)
一些选择:
stdout
。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
答案 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
我认为这是戴夫答案的第一选择......