Как разобрать вывод командной строки из c #? - PullRequest
20 голосов
/ 20 марта 2011

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

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

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

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

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

1 Ответ

45 голосов
/ 20 марта 2011

Существует еще один способ получения всех выходных данных в виде событий, когда они выводятся другим консольным приложением. 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);
        }
    }
}
...