我想从 C# 执行一个应用程序(命令行应用程序)...并且我想在执行该应用程序并向其提供输入后,我想解析将产生它的输出。因为,它会输出很多东西,而我想从中获取我需要的东西......
我怎样才能做到这一点 ??
我怎样才能得到c#中的输出,然后只从中获取我需要的东西?
为了在 C# 中执行命令行...我正在考虑使用“Jeff MC”方式,他在这个线程中解释了它如何:在 C# 中执行命令行,获取 STD OUT 结果 https://stackoverflow.com/questions/206323/how-to-execute-command-line-in-c-get-std-out-results
多谢
还有另一种方法可以在其他控制台应用程序输出所有输出时将其作为事件获取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);
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)