一尘不染

如何解析C#的命令行输出?

c#

我想从C#中执行一个应用程序(命令行应用程序).​​..,我想在执行该应用程序并为其提供输入之后,想解析将导致该结果的输出。因为,它将输出很多东西,而我想从中获取我需要的东西…

我怎样才能做到这一点 ??

我如何才能在c#中获取输出,然后仅从中获取我需要的东西?

为了在C#中执行命令行…我正在考虑使用“ Jeff MC”方式,他在此线程中对此进行了说明 如何:在C#中执行命令行,获取STD
OUT结果

非常感谢


阅读 385

收藏
2020-05-19

共1个答案

一尘不染

还有一种将所有输出作为事件获取的另一种方法,当它们被另一个控制台应用程序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);
        }
    }
}
2020-05-19