尝试从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:输出控制台
答案 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);
}
}