どのように私はstdoutに送られていないコマンド行のテキストをキャプチャするのですか?
質問
私は、プロジェクト内のLAMEコマンドラインmp3エンコーダを使用しています。私は、誰かが使っているバージョンを確認することができるようにしたいです。私は例えば、私が手なしPARAMATERSでLAME.exeを実行する場合:
C:\LAME>LAME.exe
LAME 32-bits version 3.98.2 (http://www.mp3dev.org/)
usage: blah blah
blah blah
C:\LAME>
私は、テキストファイルに>を使用してテキストファイルに出力をリダイレクトしようとした場合、テキストファイルは空です。ここで、C#でSystem.Processを使用して、それを実行しているときから、このテキストアクセス可能ですか?
解決
これはおそらく、標準エラー出力を使用しています。 CMD.EXEは、あなたが標準エラー出力をリダイレクトすることはできませんし、私が今までそれをリダイレクトしてきた唯一の方法は、DJGPPツールである。
他のヒント
これは、stdoutではなくstderrに出力してもよいです。あなたは行うことによって標準エラー出力をリダイレクトすることができます:
LAME.exe 2> textfile.txt
これはあなたの情報が表示されている場合は、、その後、LAMEは標準エラーストリームに出力しています。あなたがC#でラッパーを記述する場合は、 ProcessStartInfo と出力ストリーム>。
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.EnableRaisingEvents = false;
proc.StartInfo.FileName = @"C:\LAME\LAME.exe";
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.UseShellExecute = false;
proc.Start();
string output = proc.StandardError.ReadToEnd();
proc.WaitForExit();
MessageBox.Show(output);
働いていました。おかげですべての!
これは、標準エラー出力に送られるかもしれない、あなたはそれを試してみました?
チェックプロセス.StandardErrorするます。
タグを使用してそれを試してみてください
C:\LAME>LAME.exe 2> test.txt
所属していません StackOverflow