c# - 读取控制台应用程序的输出
问题描述
我正在尝试捕获从 .net 应用程序启动的外部程序(它的控制台应用程序)的输出。就是这样开始的。
var process = new Process();
process.StartInfo = new ProcessStartInfo
{
FileName = "c:\app.exe,
Arguments = "-x 0 -server http://foo.com",
RedirectStandardOutput = true,
RedirectStandardInput = true,
RedirectStandardError = true,
UseShellExecute = false
};
process.Start();
process.OutputDataReceived += Process_OutputDataReceived;
process.ErrorDataReceived += Process_ErrorDataReceived;
process.BeginOutputReadLine();
process.WaitForExit();
此控制台应用程序一直在运行,直到手动停止并不断向控制台窗口写入内容。我想做的是从控制台捕获输出,如果有一行,可以说“错误”,我会重新启动该过程。
上面的代码不起作用。Process_OutputDataReceived
仅当我关闭 app.exe 控制台窗口时才调用。我想我可以将输出写入某个文件并分析该文件,但我不太喜欢那样,因为我需要每秒打开/读取该文件。
有没有办法在 app.exe 写入控制台时捕获它的输出?
编辑:
将输出写入文件是选项,但文件可能会变得非常非常大,直到我得到一行“错误”,只有在那时我才会重新启动进程并删除文件。在此之前每秒打开/读取几个 100MB 以上的文件并不是我想要的方式。
解决方案
在您的 Process_OutputDataReceived 方法实现中,在如下数据中查找“错误”:
private static void Process_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
if (e.Data == "ERROR")
{
//Restart your App
}
}
推荐阅读
- regex - 正则表达式 - 如何在不重复前一组的情况下创建日期格式正则表达式
- python - “向后” np.geomspace,因此随着对数函数变得更高,密度会更高
- php - Laravel 5:调用“获取进度”路线推迟到长期运行过程的结束
- python-3.x - Python / Selenium - 如何循环通过hrefs
- ?
- c# - 使用 c# 将 dll 文件导入 UWP 项目时出错
- python-3.x - 如何将详细文本映射到一元或二元
- c - Visual Studio C Scanf 扫描两次而不是一次,只读取一次
- windows - Windows 的 Git GUI 窗口丢失和/或不可见
- python - 2013, '在查询期间丢失与 MySQL 服务器的连接 - Pymysql Microsoft sql server management Studio
- vba - 在 VBA 中实现多个接口的接口