重定向 Nashorn 标准输出和标准错误

Redirect Nashorn stdout and stderror

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

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

我知道 Nashorn 具有以下参数(如下),但我不确定如何正确初始化以及程序丢弃任何输出的方式。也许创建一个临时文件,然后在引擎完成后删除临时文件?我觉得很乱。


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

参数:输出控制台

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

参数:输出控制台

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

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);
    }
}