我正在使用javax.script API执行kotlin脚本。我想捕获输出并稍后打印日志。
我可以在nashorn脚本引擎上做到这一点,但在KotlinScriptEngine上不能这样做。
public void testExampleNashorn() throws ScriptException {
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
ScriptContext context = engine.getContext();
StringWriter writer = new StringWriter();
context.setWriter(writer);
engine.eval("print(\"Welocme to java worldddd\")");
String output = writer.toString();
System.out.println("Script output: " + output);
}Nashorn的输出
Script output: Welocme to java worldddd为kotlin调整时的相同代码片段,如下所示
public void testExampleKotlin() throws ScriptException {
ScriptEngine engine = new ScriptEngineManager().getEngineByName("kotlin");
ScriptContext context = engine.getContext();
StringWriter writer = new StringWriter();
context.setWriter(writer);
engine.eval("println(\"Welocme to java worldddd\")");
String output = writer.toString();
System.out.println("Script output: " + output);
}kotlin的输出
Welocme to java worldddd
Script output:
null我正在使用kotlin版本1.3.72,任何帮助都是非常感谢的。谢谢。
发布于 2020-06-05 19:37:35
这就是我如何设法捕获KotlinScriptEngine执行日志的方法。
public Object captureOut(String script,Bindings bindings) {
Object result=null;
ByteArrayOutputStream os = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(os);
PrintStream console = System.out;
System.setOut(ps);
try {
result = kotlinScriptingEngine.eval(script,bindings);
} catch (ScriptException scriptException) {
scriptException.printStackTrace(ps);
} finally {
System.out.flush();
System.setOut(console);
}
System.out.println("Kotlin Script Output: " + os.toString());
return result;
}https://stackoverflow.com/questions/61358345
复制相似问题