RDotNet ICharacterDevice捕获输出

时间:2017-06-23 07:51:13

标签: c# r.net

我正在尝试实现ICharacterDevice以捕获完整输出。我已经找到了一些关于此的信息,例如:

Implementing an interactive R console in c# / rdotnet?

然而,我发现无法找到一个完整的例子,并努力让我自己动手。有没有人以此为例做过这个?

非常感谢

标记

1 个答案:

答案 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();