【问题标题】:Invoking a console application from C++ program从 C++ 程序调用控制台应用程序
【发布时间】:2016-09-24 23:22:50
【问题描述】:

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

在伪代码中类似于:

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

这一定已经回答过了,但我似乎缺乏适当的术语来查找它。

以防万一,我正在使用 GCC 5.3.0 在 Windows 10 上运行 Eclipse CDT

编辑:我需要能够反复向“app.exe”发送一些值并反复接收响应,而不仅仅是使用参数调用它。这是一个小型个人项目所需要的,所以我不关心它是特定于平台的。

【问题讨论】:

  • 术语:试试“windows c++ pipe stdout”。您想要生成一个进程并将其标准输出重定向到管道。
  • This code 可能会给你一个有用的起点。它只接收来自子进程的输出(它不能发送输入),但它可以被修改为以一种希望显而易见的方式这样做。

标签: c++ windows gcc mingw console-application


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    该命令可以是执行带有您想要的参数的程序。

    system返回进程退出码,但对于其他结果没有直接支持。对于只执行一项工作并结束的程序,访问输出的一种简单方法是将程序的输出重定向到文件。

    否则,您将不得不使用 C++ 标准库不支持的通信机制,例如管道或 Windows 邮槽,也就是说,您将进入特定于平台的代码。

    【讨论】:

      猜你喜欢
      • 2013-09-15
      • 1970-01-01
      • 1970-01-01
      • 2013-12-11
      • 1970-01-01
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多