我最近在尝试重定向我的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,但是当我尝试在之后拉出一个字符串时,我得到一个数组异常。
答案 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());