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

Posted

技术标签:

【中文标题】如何解析 C# 的命令行输出?【英文标题】:How to parse command line output from c#? 【发布时间】:2011-07-19 01:29:09 【问题描述】:

我想从 C# 中执行一个应用程序(命令行应用程序).​​.....并且我想在执行这个应用程序并为其提供输入之后,我想解析将产生它的输出。因为,它会输出很多东西,我想从它那里拿走我需要的东西......

我该怎么做?

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

为了在 C# 中执行命令行...我正在考虑使用“Jeff MC”的方式,他在这个线程中解释了它 How To: Execute command line in C#, get STD OUT results

非常感谢

【问题讨论】:

【参考方案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);
        
    

【讨论】:

很好,不知道那些事件! :) 我发现对于某些进程,最好以这种方式执行命令,以确保进程在执行后退出:cmdProcess.StandardInput.WriteLine("ping www.bing.com && exit"); 谢谢@MarceloGobetti。另请参阅 ***.com/a/13719223/492 以获取 && 以及该上下文中的其他选项。 这些还包括e.Data命令提示符的提示,即“C:\path\to\some\directory\ping www.bing.com”...有没有办法只是为了得到结果?

以上是关于如何解析 C# 的命令行输出?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中解析 powershell 样式的命令行参数 [重复]

如何使用 c# 将命令行输出重定向到 ASPX 页面? [复制]

如何在 C# 中访问 Main 之外的命令行参数

在 C# 中解析命令行参数/选项

在 C# 中解析命令行选项 [重复]

Java或C#调用命令行批处理命令如何获得返回值