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

6
什么是在C++中执行外部程序并获取其返回代码的简单、优雅且有效的跨平台方法?
int execute(std::string const &path, std::vector<std::string> const &arguments = {})
{
    //...
}

由于我们需要等待被调用的程序完成后才能继续执行,所以被调用的程序应该使用我们程序的输入/输出/错误流。如果由于任何原因 path 不可执行,只需抛出异常(例如 std::invalid_argument)。

显而易见,不要使用 system()

2个回答

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
}

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

“execvp”不是跨平台的解决方案,它只适用于*nix系统。 - LB--
@LB-- 确实是这样。也许是 system - набиячлэвэли
我认为系统可能是正确的选择。我会更新我的答案。 - CLL

-1

至少对于命令行应用程序,我使用popen解决了这个问题。在Windows上是_popen,但这很容易通过定义来解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接