Как анализировать вывод командной строки из c #?

17

Я хочу выполнить приложение (приложение командной строки) из C # ... и я хочу, после выполнения этого приложения и предоставления ввода для него, я хочу проанализировать вывод, который приведет к нему. Поскольку, он выведет много вещей, и я хочу взять именно то, что мне нужно от него ...

Как я могу это сделать?

Как я могу получить результат в c #, а затем взять только то, что мне нужно от него?

Для выполнения командной строки в C # ... Я думаю использовать метод "Jeff MC", который он объяснил в этой теме Как выполнить: Выполнить командную строку на C #, получить Результаты STD OUT

Спасибо большое

    
задан Q8Y 20.03.2011 в 09:55
источник

1 ответ

43

Есть еще один способ получить все выходные данные как события, когда и когда они выводятся другим консольным приложением cmd_DataReceived получает повышенную информацию, когда есть выход, и cmd_Error получает рейз всякий раз, когда возникает ошибка, возникающая в другой заявление.

Если вы хотите проанализировать вывод, возможно, обработка этих событий - лучший способ прочитать выходные данные и обработать ошибки в другом приложении по мере их возникновения.

using System;
using System.Diagnostics;

namespace InteractWithConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            ProcessStartInfo cmdStartInfo = new ProcessStartInfo();
            cmdStartInfo.FileName = @"C:\Windows\System32\cmd.exe";
            cmdStartInfo.RedirectStandardOutput = true;
            cmdStartInfo.RedirectStandardError = true;
            cmdStartInfo.RedirectStandardInput = true;
            cmdStartInfo.UseShellExecute = false;
            cmdStartInfo.CreateNoWindow = true;

            Process cmdProcess = new Process();
            cmdProcess.StartInfo = cmdStartInfo;
            cmdProcess.ErrorDataReceived += cmd_Error;
            cmdProcess.OutputDataReceived += cmd_DataReceived;
            cmdProcess.EnableRaisingEvents = true;
            cmdProcess.Start();
            cmdProcess.BeginOutputReadLine();
            cmdProcess.BeginErrorReadLine();

            cmdProcess.StandardInput.WriteLine("ping www.bing.com");     //Execute ping bing.com
            cmdProcess.StandardInput.WriteLine("exit");                  //Execute exit.

            cmdProcess.WaitForExit();
        }

        static void cmd_DataReceived(object sender, DataReceivedEventArgs e)
        {
            Console.WriteLine("Output from other process");
            Console.WriteLine(e.Data);
        }

        static void cmd_Error(object sender, DataReceivedEventArgs e)
        {
            Console.WriteLine("Error from other process");
            Console.WriteLine(e.Data);
        }
    }
}
    
ответ дан Sanjeevakumar Hiremath 20.03.2011 в 10:30
  • Ничего, не знал об этих событиях! :) –  Shadow Wizard 20.03.2011 в 10:52
  • Большое спасибо ........ Это действительно то, что мне нужно ...;) –  Q8Y 20.03.2011 в 11:49
  • Я обнаружил, что для некоторых процессов лучше выполнить команду таким образом, чтобы гарантировать завершение процесса после выполнения: cmdProcess.StandardInput.WriteLine («ping www.bing.com && exit»); –  Gobe 05.02.2015 в 20:23
  • Спасибо @MarceloGobetti. См. Также stackoverflow.com/a/13719223/492 для && и других параметров в этом контексте. –  CAD bloke 17.08.2015 в 02:30