2010-12-21 68 views
4

我最近在嘗試爲我的ruby會話重定向ScriptEngine輸出時遇到了一個奇怪的問題。看起來無論我的腳本引擎是什麼,它總是打印到stdout和stderr。我發現這篇文章,但它說它是固定的。將Jruby ScriptEngine輸出重定向到StringWriter

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

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

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

我通過SBT運行,並使用最新版本的JRuby的complete.jar的,但它仍然將發送到stdout每次。這個問題是否真正解決了?

我也試着通過eval(...)一個StringWriter,但我得到一個數組異常,當我試圖拉出一個字符串後。

回答

3

這似乎工作(我使用1.6.1,上週公佈):

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());