2010-12-21 8 views
4

Ich habe kürzlich ein seltsames Problem beim Umleiten der ScriptEngine-Ausgabe für meine Ruby-Sitzung festgestellt. Es scheint, dass egal, was ich in meine ScriptEngine passiere, es immer zu stdout und stderr druckt. Ich habe diesen Post gefunden, aber er sagt, dass er behoben ist.Jruby-Script umleitenEngine-Ausgabe zu einem StringWriter

https://scripting.dev.java.net/issues/show_bug.cgi?id=8

scriptContext.setWriter(outWriter); 
scriptContext.setErrorWriter(errWriter); 

ruby.setContext(scriptContext); 
ruby.eval(...) 

ich durch sbt laufen und die neueste Version des jruby-complete.jar verwenden, aber es geht immer noch jedes Mal nach stdout. Wurde dieses Problem wirklich gelöst?

Ich habe auch versucht, eval(...) ein StringWriter zu übergeben, aber ich bekomme eine Array-Ausnahme, wenn ich versuche, eine Zeichenfolge danach zu ziehen.

Antwort

3

Dies scheint zu funktionieren (ich bin mit 1.6.1, veröffentlicht letzte Woche):

ScriptEngineManager factory = new ScriptEngineManager(); 
    ScriptEngine engine = factory.getEngineByName("jruby"); 
    StringWriter sw = new StringWriter(); 
    PrintWriter pw = new PrintWriter(sw); 
    engine.getContext().setWriter(pw); 
    engine.eval("puts 'hello'"); 
    System.out.println("output: " + sw.getBuffer());