JRI:如何在 Java 字符串中获取控制台输出
JRI: how to get the console output in a Java String
我在我的 Java 程序中声明 JRI 引擎如下:
REngine eng = REngine.engineForClass("org.rosuda.REngine.JRI.JRIEngine",
args, new REngineStdOutput(), false);
这工作正常,但我想在 Java 字符串而不是 Java 控制台中获取控制台输出。
我研究了 REngineStdOutput
但找不到太多。有任何想法吗?
您必须实现 org.rosuda.JRI.RMainLoopCallbacks
接口 - 特别是 rWriteConsole()
将与每个输出字符串一起调用。
Bellow 是如何将 R 输出显示为 Java 的示例。您基本上必须实施 RMainLoopCallbacks.
import org.rosuda.JRI.RMainLoopCallbacks;
import org.rosuda.JRI.Rengine;
import java.util.logging.Logger;
public class Runner {
private static Logger log = Logger.getLogger("Runner");
static class LoggingConsole implements RMainLoopCallbacks {
private Logger log;
LoggingConsole(Logger log) {
this.log = log;
}
public void rWriteConsole(Rengine re, String text, int oType) {
log.info(String.format("rWriteConsole: %s", text));
}
public void rBusy(Rengine re, int which) {
log.info(String.format("rBusy: %s", which));
}
public void rShowMessage(Rengine re, String message) {
log.info(String.format("rShowMessage: %s", message));
}
public String rReadConsole(Rengine re, String prompt, int addToHistory) {
return null;
}
public String rChooseFile(Rengine re, int newFile) {
return null;
}
public void rFlushConsole(Rengine re) {
}
public void rLoadHistory(Rengine re, String filename) {
}
public void rSaveHistory(Rengine re, String filename) {
}
}
Rengine engine = new Rengine(new String[] {"--no-save"}, false, new LoggingConsole(log));
...
// Use the engine somewhere to evaluate a R method and see the output
engine.eval("library(caret)");
}
我在我的 Java 程序中声明 JRI 引擎如下:
REngine eng = REngine.engineForClass("org.rosuda.REngine.JRI.JRIEngine",
args, new REngineStdOutput(), false);
这工作正常,但我想在 Java 字符串而不是 Java 控制台中获取控制台输出。
我研究了 REngineStdOutput
但找不到太多。有任何想法吗?
您必须实现 org.rosuda.JRI.RMainLoopCallbacks
接口 - 特别是 rWriteConsole()
将与每个输出字符串一起调用。
Bellow 是如何将 R 输出显示为 Java 的示例。您基本上必须实施 RMainLoopCallbacks.
import org.rosuda.JRI.RMainLoopCallbacks;
import org.rosuda.JRI.Rengine;
import java.util.logging.Logger;
public class Runner {
private static Logger log = Logger.getLogger("Runner");
static class LoggingConsole implements RMainLoopCallbacks {
private Logger log;
LoggingConsole(Logger log) {
this.log = log;
}
public void rWriteConsole(Rengine re, String text, int oType) {
log.info(String.format("rWriteConsole: %s", text));
}
public void rBusy(Rengine re, int which) {
log.info(String.format("rBusy: %s", which));
}
public void rShowMessage(Rengine re, String message) {
log.info(String.format("rShowMessage: %s", message));
}
public String rReadConsole(Rengine re, String prompt, int addToHistory) {
return null;
}
public String rChooseFile(Rengine re, int newFile) {
return null;
}
public void rFlushConsole(Rengine re) {
}
public void rLoadHistory(Rengine re, String filename) {
}
public void rSaveHistory(Rengine re, String filename) {
}
}
Rengine engine = new Rengine(new String[] {"--no-save"}, false, new LoggingConsole(log));
...
// Use the engine somewhere to evaluate a R method and see the output
engine.eval("library(caret)");
}