简单C++;跨平台执行外部程序的方式 什么是一个简单、优雅、有效的跨平台方式来执行C++中的外部程序并从中获取返回代码? int执行(std::string const&path,std::vector const&arguments={}) { //... }

简单C++;跨平台执行外部程序的方式 什么是一个简单、优雅、有效的跨平台方式来执行C++中的外部程序并从中获取返回代码? int执行(std::string const&path,std::vector const&arguments={}) { //... },c++,cross-platform,C++,Cross Platform,因为我们正在等待被调用程序在继续执行之前完成,所以被调用程序应该使用我们程序的输入/输出/错误流。如果由于各种原因,path不可执行,只需抛出一个异常(例如std::invalid_参数) 显然,不要使用system()如果您只需要执行一个程序,那么生成一个工作线程,并让该线程调用system: void executeProgram(std::string programName) { system(programName.c_str()); } void execute() {

因为我们正在等待被调用程序在继续执行之前完成,所以被调用程序应该使用我们程序的输入/输出/错误流。如果由于各种原因,
path
不可执行,只需抛出一个异常(例如
std::invalid_参数


显然,不要使用
system()

如果您只需要执行一个程序,那么生成一个工作线程,并让该线程调用
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
}

如果您需要能够生成许多程序,那么一个线程池类来委派工作线程并在完成时加入它们可能更有意义

至少对于命令行应用程序,我使用
popen
解决了这个问题。windows上的是
\u popen
,但这很容易用define解决,不是
execvp
*nix吗?这不是一个跨平台的解决方案。@LB--确实是<代码>系统也许?我认为系统可能是一条出路。我会更新我的答案。