如何限制管道(窗口)的缓冲区大小?

时间:2018-05-13 10:23:04

标签: windows cmd pipe stdout qprocess

我正在尝试控制和读取第三方控制台应用程序的输出,其源代码我无法更改。

我想为此使用QProcess,但这并不重要,因为只使用cmd时问题是相同的: 第三方应用程序似乎永远不会调用flush()。 因此,直接在cmd.exe中调用它(输出显示在cmd窗口中),但在调用例如

3rdPartyApp.exe > Output.txt

Output.txt保持空白,直到3rdPartyApp.exe终止或退出。 在3rdPartyApp.exe退出或终止后,可以在Output.txt中找到所有stdout。

问题: 我该怎么做才能创建一个管道缓冲区大小有限的环境,比如直接在cmd.exe中调用,这似乎将缓冲区大小限制为一行?

1 个答案:

答案 0 :(得分:0)

您可以做的是创建自己的控制台类型应用程序,该应用程序将运行 3rd 方进程并“处理”它的缓冲。 然后,您只需重定向代理控制台应用程序的输出,而不是重定向 3rd 方应用程序的输出。

怎么做?你可以在这里阅读:https://www.codeproject.com/Articles/16163/Real-Time-Console-Output-Redirection

作者提供了解释并准备使用名为 RTConsole.exe 的控制台应用程序。

我在从我的 .NET 应用程序生成的 3rd 方 pyhton 可执行文件中获取无缓冲输出时遇到了很大的问题,这个 RTConsole.exe 救了我。