首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在javax.script API中重定向KotlinScriptEngine的标准输出

在javax.script API中重定向KotlinScriptEngine的标准输出
EN

Stack Overflow用户
提问于 2020-04-22 14:08:10
回答 1查看 126关注 0票数 0

我正在使用javax.script API执行kotlin脚本。我想捕获输出并稍后打印日志。

我可以在nashorn脚本引擎上做到这一点,但在KotlinScriptEngine上不能这样做。

代码语言:javascript
复制
    public void testExampleNashorn() throws ScriptException {
        ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
        ScriptContext context = engine.getContext();
        StringWriter writer = new StringWriter();
        context.setWriter(writer);

        engine.eval("print(\"Welocme to java worldddd\")");

        String output = writer.toString();

        System.out.println("Script output: " + output);
    }

Nashorn的输出

代码语言:javascript
复制
Script output: Welocme to java worldddd

为kotlin调整时的相同代码片段,如下所示

代码语言:javascript
复制
    public void testExampleKotlin() throws ScriptException {
        ScriptEngine engine = new ScriptEngineManager().getEngineByName("kotlin");
        ScriptContext context = engine.getContext();
        StringWriter writer = new StringWriter();
        context.setWriter(writer);

        engine.eval("println(\"Welocme to java worldddd\")");

        String output = writer.toString();

        System.out.println("Script output: " + output);
    }

kotlin的输出

代码语言:javascript
复制
Welocme to java worldddd
Script output: 
null

我正在使用kotlin版本1.3.72,任何帮助都是非常感谢的。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-05 19:37:35

这就是我如何设法捕获KotlinScriptEngine执行日志的方法。

代码语言:javascript
复制
public Object captureOut(String script,Bindings bindings)  {
        Object result=null;
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        PrintStream ps = new PrintStream(os);
        PrintStream console = System.out;
        System.setOut(ps);

        try {
            result = kotlinScriptingEngine.eval(script,bindings);
        } catch (ScriptException scriptException) {
            scriptException.printStackTrace(ps);
        }  finally {
            System.out.flush();
            System.setOut(console);
        }
        System.out.println("Kotlin Script Output: " + os.toString());
        return result;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61358345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档