如何处理 C++ 重定向进程的输出

Posted

技术标签:

【中文标题】如何处理 C++ 重定向进程的输出【英文标题】:How to handle output of C++ redirected process 【发布时间】:2016-01-09 17:40:38 【问题描述】:

我正在开发一个 C++ 应用程序,但遇到了问题。

请参阅下面对我的应用程序的简要说明: 有两个过程协同工作。主进程(应用程序 A)调用第二个进程(应用程序 B),它是第一个进程的子进程。

应用程序 A : 主应用程序:带有 QT 界面和进度条的 C++ 应用程序。它使用 CreateProcess 调用另一个进程。

应用程序 B:C++ 可执行文件。此 exe 在标准输出上生成输出消息,例如: 进展 1% 进度 20% ... 进度 100%

我想做的事: 我想用应用程序 A 启动应用程序 B。我的意思是当我启动整个应用程序时,应用程序 A 运行并创建另一个启动应用程序 B 的进程。我想捕获 B 的输出并更新进度条应用 A。 我已经实现了这篇文章中解释的重定向系统:https://support.microsoft.com/en-us/kb/190351

它可以工作,但问题是 B 的输出消息是在 exe 终止时而不是在执行期间处理的。 我想在执行期间处理 B 的输出消息。我正在考虑通过使用命名管道来使用重定向系统。 你怎么看?有什么建议吗?有什么想法吗?

提前谢谢你。

【问题讨论】:

【参考方案1】:

也许进程 B 的输出是缓冲的,只有在应用程序完成后才刷新。您可以在每个输出上显式地flush() 输出流,看看它是否有帮助。

【讨论】:

我猜输出仅以 CR 终止 (\r)。 是的,输出以 CR 终止。我应该在孩子的每条输出消息之后使用 flush() 吗?

以上是关于如何处理 C++ 重定向进程的输出的主要内容,如果未能解决你的问题,请参考以下文章

如何处理“太多 HTTP 重定向”错误

如何处理 Spring Boot 重定向到 /error?

如何处理 Codeigniter 上的多语言 uri 重定向?

如何处理表单提交而不对用户可见重定向

如何处理对客户端反应应用程序的外部重定向?

python 爬网页 遇到重定向怎么处理