我想执行某个批处理文件并将其控制台输出重定向到visual c ++中的文本控件,或者在显示日志/回显的同时重定向控制台输出。
答案 0 :(得分:4)
基本上,您必须使运行过程写入管道,并读取此管道的输出。
[编辑]我知道SciTE是如何做到的(你可以看看源码:win32 / SciTEWin.cxx,ExecuteOne函数),我搜索了一种稍微更通用的方式,从微软本身找到了How to spawn console processes with redirected standard handles。
例如,如果您搜索 CreatePipe PeekNamedPipe CreateProcess 关键字,您可能会找到其他示例。
答案 1 :(得分:1)
另一种选择是使用Boost.Process (Boost.Process不是(尚未)官方的Boost C ++库。必须单独下载和安装)。
示例“Child.4 - Reading from a child using asynchronous I/O”显示了如何将子进程的输出重定向到C ++流(以后访问内容)。
示例“Child.4 - Reading from a child using asynchronous I/O”显示如何使用Boost.Process与Boost.Asio一起访问子I / O 异步。
这种方法的优点是,Boost.Process支持Windows API和POSIX API。
答案 2 :(得分:0)
如果优雅不是优先考虑的话,那么一个非常简单的解决方案可能是将输出重定向到文件,然后读入文件内容。