重定向exe批处理文件的输出

时间:2020-03-06 14:39:15  来源:igfitidea点击:

我想执行某个批处理文件,并将其控制台输出重定向到Visual c ++中的文本控件,或者在显示日志/回显的同时重定向控制台输出。

解决方案

基本上,我们必须使运行过程写入管道,并读取该管道的输出。

[编辑]我知道SciTE是如何做到的(我们可以查看源代码:win32 / SciTEWin.cxx,ExecuteOne函数),我搜索了一种更为通用的方法,发现了如何从Microsoft本身生成带有重定向的标准句柄的控制台进程。
例如,如果搜索CreatePipe PeekNamedPipe CreateProcess关键字,则可能会找到其他示例。

如果不是优先考虑优雅,那么一个真正简单的解决方案可能是将输出重定向到文件,然后读入文件内容。

另一个选择是使用Boost.Process(Boost.Process尚未(尚未)是官方的Boost C ++库。必须单独下载和安装)。

示例" Child.4使用异步I / O从子读取"展示了如何将子进程的输出重定向到C ++流(并在以后访问内容)。

示例" Child.4使用异步I / O从子读取"展示了如何将Boost.Process与Boost.Asio一起使用来访问子I / O异步。

这种方法的优点是,Boost.Process支持Windows API和POSIX API。