GroovyShell クラスを使用して Groovy エンジンを作成します。次に、「評価」メソッドを使用して一連のステートメントを実行します。
「println」呼び出しの出力を取得できるように、エンジンの出力をキャッチする方法はありますか?
これはスイングアプリケーションですが、現在は stdout に移動します。
質問する
1972 次
2 に答える
2
カスタム ライター (例: StringWriter) をout
バインディングのプロパティに割り当てて、それを GroovyShell に渡すだけです。
def binding = new Binding();
binding.setProperty("out", new YourWriter())
new GroovyShell(binding);
于 2016-03-02T17:31:29.750 に答える
1
scriptBaseClass
メソッドで a を設定できprintln
、値の上で自由に操作できます。ユーザーは引き続き を実行できます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 に答える