Rインストールの\ bin \ディレクトリにあるRScript.exeを利用してRスクリプトを実行しようとしています。 WindowsのコマンドラインからRScriptを実行すると、結果が画面に表示されます。 System.Diagnostics.Process()を使用してC#でレプリケートしようとすると、出力が失われているようです。RScriptからC#経由でstdoutを取得する
単純な例として、私は実際のrコードを無視して、RScript.exeからバージョン情報を読み取ろうとします。 CMDプロンプトから実行する場合:
rscript --version
私は画面に表示さ
R scripting front-end version 3.2.3 (2015-12-10)
私はこのC#コードで同じことを行うと、何もキャプチャされません。
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();
これは非常に単純なはずですが、C#からstdoutをキャプチャする多くの例を見るにもかかわらず、私はまだ困惑しています。
私の最近の推測では、RScriptは 'System.Diagnostics.Process()'で起動するとstdoutに書き込まないということです。私はなぜそれが事実だろうか分かりません。 –