2016-09-24 216 views
0

我有一个控制台应用程序'app.exe',我想从C++程序调用,然后与它通信,就好像它是一个命令行一样。本质上,我想在另一个控制台应用程序中创建一个C++包装器,以便我可以随意地将输入传递给它并接收输出。从C++程序调用控制台应用程序

在伪代码是这样的:

std:string input("...some parameters..."), output; 
Process app("app.exe"); 
app.InputOutput(input, output); 
std::cout<<output; 

这必须已回答了,但我似乎缺乏适当的术语来关注一下吧。

在它的事项的情况下,我在Windows 10上运行的Eclipse CDT使用GCC 5.3.0

编辑:我需要能够重复发送一些值“APP.EXE”,并多次得到响应,而而不仅仅是用参数调用它。这是一个小型个人项目所需要的,所以我不关心它是否是特定于平台的。

+0

术语:尝试“windows C++ pipe stdout”。你想产生一个进程并将其stdout重定向到管道。 – jdigital

+0

[This code](http://stackoverflow.com/a/10888698/886887)可能会给你一个有用的起点。它只接收来自子进程的输出(它不能发送输入),但它可以修改为以显而易见的方式执行。 –

回答

0

我使用this code作为起点,在MFC对话框中显示被调用进程的输出。这是相当无痛的,因为这是有据可查的。他告诉你为什么他在做什么。它应该适用于您使用Windows平台的情况。但正如Alf指出的那样,跨平台是另一回事。

0

您可以使用system函数来调用shell(命令行)命令。

该命令可以用你想要的参数执行程序。

system返回进程退出代码,但对于其他结果没有直接的支持。访问输出的一种简单方法就是将程序的输出重定向到一个文件,对于只是完成作业并结束的程序而言。

否则,您将不得不使用C++标准库不支持的通信机制(例如管道或Windows邮件槽),即您将使用特定于平台的代码。