2008-09-24 121 views

回答

4

基本上,您必须让运行过程写入管道,并读取此管道的输出。我知道SciTE如何做到这一点(你可以看看源码:win32/SciTEWin.cxx,ExecuteOne函数),我搜索了一个稍微更通用的方式,发现微软自己的How to spawn console processes with redirected standard handles
如果您查找CreatePipe PeekNamedPipe CreateProcess关键字,例如,您可能会发现其他示例。

0

如果优雅不是一个优先事项,那么一个非常简单的解决方案可能是将输出重定向到一个文件,然后读取文件内容。

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” 显示了如何使用togehter与Boost.Process Boost.Asio访问孩子的I/O异步

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

相关问题