C#调用cmd输出到日志出现重复行,如何仅读取指定目标行内容
问题根源
- 现有逻辑逐行读取输出时,每一行不匹配目标字符串就会触发一次失败日志记录,cmd执行过程中输出的无关内容都会生成多余的失败记录
- 额外逻辑错误:
process.WaitForExit()被放在while循环内部,会导致第一次读取行后就阻塞等待进程退出,后续输出行无法正常读取
修复方案
新增一个标记位记录是否找到匹配的目标行,遍历完所有输出内容后,再统一根据标记位输出一次结果即可,不需要逐行输出状态。
修复后代码
start = DateTime.Now.ToString("HH:mm:ss tt"); // 新增匹配成功标记位,默认值为false bool taskSuccess = false; var process = new Process { StartInfo = new ProcessStartInfo { FileName = "cmd.exe", Arguments = "/c command here", UseShellExecute = false, RedirectStandardOutput = true } }; process.Start(); while (!process.StandardOutput.EndOfStream) { string line = process.StandardOutput.ReadLine(); Console.WriteLine(line); // 只要找到一次匹配就把标记位设为true,无需重复赋值 if (line.Contains("Output goes here.")) { taskSuccess = true; } } // 所有输出读取完成后再等待进程退出 process.WaitForExit(); finish = DateTime.Now.ToString("HH:mm:ss tt"); // 统一输出一次任务结果 if (taskSuccess) { PrintRow("Task 1", start, finish, "SUCCESS"); } else { PrintRow("Task 1", start, finish, "FAILURE"); } PrintLine();
内容的提问来源于stack exchange,提问作者Broski
相关产品推荐
相关产品推荐

