RDotNet ICharacterDevice 捕获输出
RDotNet ICharacterDevice Capture Output
我正在尝试实现一个 ICharacterDevice 来捕获完整的输出。我找到了一些关于此的信息,例如:
Implementing an interactive R console in c# / rdotnet?
然而,我发现不可能找到一个完整的例子,并且很难靠我自己来实现它。有没有人用例子做过这个?
非常感谢
马克
为了捕获输出,您需要实现自己的 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();
我正在尝试实现一个 ICharacterDevice 来捕获完整的输出。我找到了一些关于此的信息,例如:
Implementing an interactive R console in c# / rdotnet?
然而,我发现不可能找到一个完整的例子,并且很难靠我自己来实现它。有没有人用例子做过这个?
非常感谢
马克
为了捕获输出,您需要实现自己的 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();