在 javax.script API 中重定向 KotlinScriptEngine 的标准输出
Redirect stdout of KotlinScriptEngine in javax.script API
我正在使用 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
非常感谢任何帮助。谢谢。
这就是我设法捕获 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;
}
我正在使用 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 非常感谢任何帮助。谢谢。
这就是我设法捕获 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;
}