Ich versuche, ein R-Skript mit der RScript.exe im Verzeichnis \ bin \ einer R-Installation ausführen. Das Ausführen von RScript über die Windows-Befehlszeile schreibt Ergebnisse auf den Bildschirm. Wenn ich versuche, in C# mit dem System.Diagnostics.Process() zu replizieren, scheint die Ausgabe zu fehlen.Capture stdout von RScript über C#
Für ein einfaches Beispiel, ich werde meine tatsächlichen R-Code ignorieren, und einfach versuchen, Versionsinformationen von RScript.exe zu lesen. Wenn von der Befehlszeile ausführen:
rscript --version
Ich sehe auf dem Bildschirm
R scripting front-end version 3.2.3 (2015-12-10)
Wenn ich das gleiche in diesem C# -Code zu tun, ist nichts gefangen.
StringBuilder outputBuilder = new StringBuilder();
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = "rscript";
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.ErrorDialog = false;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.Arguments = "--version";
proc.EnableRaisingEvents = true;
proc.OutputDataReceived += new DataReceivedEventHandler
(
delegate(object sender, DataReceivedEventArgs e)
{
outputBuilder.Append(e.Data);
}
);
proc.ErrorDataReceived += new DataReceivedEventHandler
(
delegate(object sender, DataReceivedEventArgs e)
{
outputBuilder.Append(e.Data);
}
);
proc.Start();
proc.BeginOutputReadLine();
proc.BeginErrorReadLine();
proc.WaitForExit();
string allOutput = outputBuilder.ToString();
Es scheint, wie dies sehr einfach sein sollte, aber trotz an vielen Beispielen suchen stdout von C# Fang, bin ich immer noch nicht gefunden.
Meine letzte Vermutung ist, dass RScript nicht in stdout schreibt, wenn es über 'System.Diagnostics.Process()' gestartet wird. Ich habe keine Ahnung, warum das so wäre. –