在C ++中执行外部程序并从中获取返回代码的简单,优雅和有效的跨平台方法是什么?
int execute(std::string const &path, std::vector<std::string> const &arguments = {})
{
//...
}
由于我们在继续执行之前等待被调用程序完成,因此被调用程序应该使用我们程序的输入/输出/错误流。如果由于多种原因导致path
无法执行,只需抛出异常(例如std::invalid_argument
)。
显然,请勿使用system()
。
答案 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}}但是可以通过定义轻松解决