2013-07-22 80 views
3

我使用GroovyShell類創建了一個groovy引擎。 然後我用「評估」方法運行一堆語句。
有沒有辦法捕捉引擎的輸出,所以我可以得到「println」調用輸出?
目前它轉到stdout,雖然它是一個swing應用程序。如何捕獲GroovyShell輸出?

回答

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") 
+0

謝謝。由於我是從java代碼中完成的,你知道我應該如何定義Printer類(Java代碼)嗎? –

+0

既然你正在用Java編寫'Printer',你是否遇到了'this.binding'? – Will

+0

謝謝,我已經想通了。 –