我使用GroovyShell类创建了一个groovy引擎。然后,我使用"evaluate“方法运行一系列语句。
有没有办法捕获引擎的输出,这样我就可以得到"println“调用的输出?
尽管它是一个swing应用程序,但目前它转到了stdout。
发布于 2016-03-03 01:31:30
您可以只分配您的自定义Writer (例如,StringWriter)设置为绑定中的out属性,并将其传递给GroovyShell。
def binding = new Binding();
binding.setProperty("out", new YourWriter())
new GroovyShell(binding);发布于 2013-07-22 19:53:06
您可以使用println方法设置scriptBaseClass,并且可以自由地对该值进行操作。请记住,用户仍然可以执行System.out.println,但如果需要,可以使用you can blacklist。
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" )https://stackoverflow.com/questions/17785911
复制相似问题