【发布时间】:2010-09-12 16:35:13
【问题描述】:
我想执行某个批处理文件并将其控制台输出重定向到 Visual c++ 中的文本控件,或者在显示日志/回显的同时重定向控制台输出。
【问题讨论】:
标签: c++ visual-c++ batch-file
我想执行某个批处理文件并将其控制台输出重定向到 Visual c++ 中的文本控件,或者在显示日志/回显的同时重定向控制台输出。
【问题讨论】:
标签: c++ visual-c++ batch-file
基本上,您必须让运行进程写入管道,并读取该管道的输出。
[编辑] 我知道 SciTE 是如何做到这一点的(你可以看看源代码:win32/SciTEWin.cxx,ExecuteOne 函数),我搜索了一个稍微通用的方法,从微软本身找到了How to spawn console processes with redirected standard handles。
例如,如果您搜索 CreatePipe PeekNamedPipe CreateProcess 关键字,您可能会找到其他示例。
【讨论】:
另一种选择是使用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。
【讨论】:
如果优雅不是优先事项,那么一个非常简单的解决方案可能是将输出重定向到文件,然后读入文件内容。
【讨论】: