我使用 GroovyShell 类创建了一个 groovy 引擎。然后我用“评估”方法运行了一堆语句。
有没有办法捕捉引擎的输出,这样我就可以获得“println”调用输出?
目前它进入标准输出,尽管它是一个摇摆应用程序。
问问题
1972 次
2 回答
2
您可以将自定义 Writer(例如 StringWriter)分配给out
绑定中的属性并将其传递给 GroovyShell。
def binding = new Binding();
binding.setProperty("out", new YourWriter())
new GroovyShell(binding);
于 2016-03-02T17:31:29.750 回答
1
您可以scriptBaseClass
使用println
方法设置 a ,并且您可以在该值之上自由操作。请记住,用户仍然可以这样做System.out.println
,但如果需要,您可以将其列入黑名单。
import org.codehaus.groovy.control.CompilerConfiguration
def script = """
a = 10
println a
println "echo"
"""
abstract class Printer extends Script {
void println(obj) {
this.binding.printed << obj
}
}
def config = new CompilerConfiguration(scriptBaseClass: Printer.class.name)
def binding = new Binding([printed: []])
new GroovyShell(this.class.classLoader, binding, config).evaluate script
assert binding.variables.printed.contains( 10 )
assert binding.variables.printed.contains( "echo" )
于 2013-07-22T11:53:05.670 回答