java - 将 Jruby ScriptEngine 输出重定向到 StringWriter

标签 java jruby redirect scriptengine

我最近在尝试为我的 ruby​​ session 重定向 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.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());

关于java - 将 Jruby ScriptEngine 输出重定向到 StringWriter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4502974/

相关文章:

ruby - 比 JSON 更快的简单序列化? (在 ruby 中)

php - 当我注销时页面未正确重定向

java - 如何批量删除hbase中的多行?

tomcat - Tomcat 7 在目录上应用重定向 302 的位置(seo 故事))

php - symfony 2 - 请求跟随重定向

Java编译器显示错误 “integer is too large”

java - C 中用于 Java 的 BCI 库

java - 为什么列表在 python 和 Java 中表现不同?

java - 计算两个重复列表的差异

ruby - 如何测试和记录带有某些 C 扩展的 gem 的 JRuby 兼容性