4

GroovyShell クラスを使用して Groovy エンジンを作成します。次に、「評価」メソッドを使用して一連のステートメントを実行します。
「println」呼び出しの出力を取得できるように、エンジンの出力をキャッチする方法はありますか?
これはスイングアプリケーションですが、現在は stdout に移動します。

4

2 に答える 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 に答える