Как захватить текст командной строки, который не отправляется на стандартный вывод?
Вопрос
Я использую 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 в С#?
Решение
Вероятно, он использует stderr.cmd.exe не позволяет перенаправлять поток stderr, и единственный способ его перенаправления — с помощью инструмента djgpp.
Другие советы
Он может быть выведен на stderr вместо stdout.Ты можешь перенаправить стандартный поток ошибок при выполнении:
LAME.exe 2> textfile.txt
Если это показывает вам информацию, то LAME выводит в стандартный поток ошибок.Если вы напишете оболочку на C#, вы сможете перенаправить стандартная ошибка и выходные потоки из Процессстартинформо.
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);
работал.Спасибо всем!
Его можно отправить в stderr, вы пробовали это?
Проверить Процесс.StandardError.
Попробуйте это, используя
C:\LAME>LAME.exe 2> test.txt