Перенаправление Nashorn stdout и stderror

Попытка перенаправить механизм сценариев Nashorn из класса Java. Вот как я сейчас это инициализирую. Я бы хотел перенаправить любой вывод из скриптов, которые запускает движок.

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)

param: консоль вывода

--stdout (Перенаправить стандартный вывод на имя файла или другой tty, например, stderr)

param: консоль вывода

1 ответ

Решение

Вы можете перенаправить вывод следующим образом:

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);
    }
}
Другие вопросы по тегам