我正在尝试实现ICharacterDevice以捕获完整输出。我已经找到了一些关于此的信息,例如:
Implementing an interactive R console in c# / rdotnet?
然而,我发现无法找到一个完整的例子,并努力让我自己动手。有没有人以此为例做过这个?非常感谢
标记
答案 0 :(得分:2)
为了捕获输出,您需要实现自己的ICharacterDevice。好消息是你只需要实现WriteConsole方法。您可以从默认的ConsoleDevice开始,也可以从头开始创建。
public class MyCharacterDevice : RDotNet.Devices.ICharacterDevice
{
public StringBuilder sb = new StringBuilder();
public void WriteConsole(string output, int length, RDotNet.Internals.ConsoleOutputType outputType)
{
sb.Append(output);
}
//rest of the implementation here
}
我添加了一个StringBuilder来挖掘并附加每个输出消息。
最后,您需要将此ICharacterDevice传递给GetInstance和Initialize方法:
RDotNet.StartupParameter sp = new StartupParameter();
sp.Interactive = false;
sp.Quiet = false;
MyCharacterDevice ic = new MyCharacterDevice();
REngine.SetEnvironmentVariables(Rpath);
REngine engine = REngine.GetInstance("", true, sp, ic);
if (engine.IsRunning == false)
{
engine.Initialize(sp, ic, true);
}
//engine.Evaluate code...
string rConsoleMessages = ic.sb.ToString();