将Jruby ScriptEngine输出重定向到StringWriter

时间:2010-12-21 19:08:24

标签: java jruby redirect scriptengine

我最近在尝试重定向我的ruby会话的ScriptEngine输出时遇到了一个奇怪的问题。似乎无论我进入我的ScriptEngine是什么,它总是打印到stdout和stderr。我找到了这篇文章,但它说这是固定的。

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,但是当我尝试在之后拉出一个字符串时,我得到一个数组异常。

1 个答案:

答案 0 :(得分: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());