简单的C ++跨平台方式来执行外部程序

时间:2015-03-12 03:54:14

标签: c++ cross-platform

在C ++中执行外部程序并从中获取返回代码的简单,优雅和有效的跨平台方法是什么?

int execute(std::string const &path, std::vector<std::string> const &arguments = {})
{
    //...
}

由于我们在继续执行之前等待被调用程序完成,因此被调用程序应该使用我们程序的输入/输出/错误流。如果由于多种原因导致path无法执行,只需抛出异常(例如std::invalid_argument)。

显然,请勿使用system()

2 个答案:

答案 0 :(得分:0)

如果只需要执行一个程序,则生成一个工作线程并让该线程调用system

void executeProgram(std::string programName) {
    system(programName.c_str());
}

void execute() {
    string programName = "test.cpp";
    std::thread worker (executeProgram, programName);
    worker.join(); //wait for the worker to complete
}

如果您需要能够生成许多程序,则委托工作线程并在完成时加入它们的线程池类可能更有意义。

答案 1 :(得分:-1)

至少对于命令行应用程序,我使用_popen解决了这个问题。在Windows上{{1}}但是可以通过定义轻松解决