重定向Nashorn stdout和stderror

时间:2017-01-04 19:08:19

标签: java nashorn

尝试从Java类中重定向Nashorn脚本引擎。这就是我现在正在初始化它的方式。我想重定向引擎运行的脚本中的任何输出。

String[] nashornArgs = new String[] {"-strict", "--no-java",
                "--no-syntax-extensions", "-dump-on-error"};
NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
ScriptEngine engine = factory.getScriptEngine(nashornArgs);

我知道Nashorn有以下args(下面),但我不确定如何正确初始化并以某种方式丢弃任何输出程序。也许创建一个临时文件,然后在引擎完成后删除临时文件?对我来说似乎很乱。

- stderr(将stderr重定向到文件名或另一个tty,例如stdout)

param:输出控制台

- stdout(将stdout重定向到文件名或另一个tty,例如stderr)

param:输出控制台

1 个答案:

答案 0 :(得分:2)

您可以像这样重定向输出:

package com.example;

import java.io.StringWriter;

import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptException;

import jdk.nashorn.api.scripting.NashornScriptEngineFactory;

public class Nashorn {
    public static void main(String[] args) throws ScriptException {
        String[] arguments = new String[] {"-strict", "--no-java", "--no-syntax-extensions", "-dump-on-error"};
        NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
        ScriptEngine engine = factory.getScriptEngine(arguments);
        StringWriter sw = new StringWriter();
        ScriptContext context = engine.getContext();
        context.setWriter(sw);
        context.setErrorWriter(sw);
        engine.eval("print('hello world')");
        System.out.println("redirected output: " + sw);
    }
}