Перенаправление 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);
}
}