c#处理/cmd输出解析变量
本文关键字:变量 输出 cmd 处理 | 更新日期: 2023-09-27 17:54:38
我正在制作gui到rtmp-plugin,这是命令行程序。我需要从cmd程序读取输出数据到三个变量的方法:下载,时间和完成。在cmd中输出的示例是"3000 kb/12 sec(12%)",不带"。我怎么能得到3000的下载变量没有kb和12的时间没有秒和12完成没有()和%。下面是我运行cmd进程的代码。
int downloaded, time, done;
var proc = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "Data/yle-dl/yle-dl.exe",
Arguments = "-o pasila.flv http://areena.yle.fi/tv/1755554 --rtmpdump rtmpdump.exe ",
UseShellExecute = false,
RedirectStandardOutput = true,
CreateNoWindow = false
}
};
proc.Start();
您可以使用regex捕获程序输出并解析值。请注意,您还应该捕获错误输出,因为它经常发生,正常输出被作为错误处理。
Process process = new Process();
process.StartInfo.FileName = "Data/yle-dl/yle-dl.exe";
process.StartInfo.Arguments = "-o pasila.flv http://areena.yle.fi/tv/1755554 --rtmpdump rtmpdump.exe ";
process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.UseShellExecute = false;
process.OutputDataReceived += new DataReceivedEventHandler(ReadOutput);
process.ErrorDataReceived += new DataReceivedEventHandler(ReadOutput);
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
process.WaitForExit();
private static void ReadOutput(object sender, DataReceivedEventArgs e)
{
if (e.Data != null)
{
Match m = Regex.Match(e.Data, "(''d+)[^0-9]*(''d+)[^0-9]*(''d+)[^0-9]");
if (m.Success)
{
textBox1.Text = m.Result("$1");
string time = m.Result("$2");
string percent = m.Result("$3");
}
}
}
如果命令行已经有某种输出,您可以使用BeginOutputReadLine捕获它。
否则,您可以将程序集添加到程序引用中,并访问程序用来指示您的状态的(如果存在的话)变量。