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();

c#处理/cmd输出解析变量

您可以使用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捕获它。

否则,您可以将程序集添加到程序引用中,并访问程序用来指示您的状态的(如果存在的话)变量。