Как перехватить текст командной строки, который не отправляется на стандартный вывод? - PullRequest
6 голосов
/ 05 февраля 2010

Я использую кодировщик mp3 командной строки LAME в проекте. Я хочу видеть, какую версию кто-то использует. если я просто выполню LAME.exe без параметров, я получу, например:

C:\LAME>LAME.exe
LAME 32-bits version 3.98.2 (http://www.mp3dev.org/)

usage: blah blah
blah blah

C:\LAME>

если я попытаюсь перенаправить вывод в текстовый файл, используя> в текстовый файл, текстовый файл будет пустым. Откуда этот текст доступен при запуске с помощью System.Process в c #?

Ответы [ 4 ]

3 голосов
/ 05 февраля 2010

Может выводиться в stderr вместо stdout. Вы можете перенаправить stderr , выполнив:

LAME.exe 2> textfile.txt

Если это показывает вам информацию, то LAME выводится в стандартный поток ошибок. Если вы пишете оболочку на C #, вы можете перенаправить стандартную ошибку и выходные потоки из ProcessStartInfo .

1 голос
/ 05 февраля 2010
        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);

работал. спасибо всем!

0 голосов
/ 05 февраля 2010

Вероятно, он использует stderr. cmd.exe не позволяет вам перенаправлять stderr, и я перенаправил его только с помощью инструмента djgpp.

0 голосов
/ 05 февраля 2010

Это может быть отправлено в stderr, вы пробовали это?

Извлечение Process.StandardError .

Попробуйте, используя

C:\LAME>LAME.exe 2> test.txt
...