我使用GroovyShell类创建了一个groovy引擎。 然后我用“评估”方法运行一堆语句。
有没有办法捕捉引擎的输出,所以我可以得到“println”调用输出?
目前它转到stdout,虽然它是一个swing应用程序。如何捕获GroovyShell输出?
3
A
回答
2
您只需指定您的自定义作家(如StringWriter的),以out
财产的结合,并把它传递给GroovyShell。
def binding = new Binding();
binding.setProperty("out", new YourWriter())
new GroovyShell(binding);
1
您可以使用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")
相关问题
- 1. 如何捕获输出?
- 2. 捕获FFMPEG输出
- 3. pexpect捕获输出
- 4. 如何从shell命令捕获输出?
- 5. 如何在rails中捕获ffmpeg输出?
- 6. 如何从CakePHP Shell捕获输出
- 7. 如何捕获clojure的标准输出?
- 8. 如何捕获PHP输出到变量
- 9. 如何捕获dvdauthor输出到文件
- 10. 如何捕获系统的输出()
- 11. 如何捕获RCurl详细输出
- 12. 如何捕获execvp的输出
- 13. 如何捕获输出的Java
- 14. Powershell:如何捕获主机的输出
- 15. Powershell:如何捕获PowerShell输出
- 16. 如何捕获流输出Python从subprocess.communicate()
- 17. 如何捕获Windows cmd shell的输出?
- 18. 如何在PHP中捕获捕获子进程输出
- 19. 如何在C#/ .NET中捕获二进制输出输出
- 20. 如何捕获Zend视图输出而不是实际输出
- 21. 从NodeJS捕获输出输出
- 22. 从wget捕获python输出?
- 23. php:捕获命令输出
- 24. 捕获的bash输出
- 25. 捕获SysLogHandler的输出
- 26. 红宝石:捕获输出
- 27. 捕获Python脚本输出
- 28. 捕获标量输出
- 29. vmc apps捕获输出
- 30. install.packages的捕获输出
谢谢。由于我是从java代码中完成的,你知道我应该如何定义Printer类(Java代码)吗? –
既然你正在用Java编写'Printer',你是否遇到了'this.binding'? – Will
谢谢,我已经想通了。 –