Given the following answer (first c++11 answer):
How to execute a command and get output of command within C++ using POSIX?
Here is the implementation for your convinience:
#include <cstdio>
#include <iostream>
#include <memory>
#include <stdexcept>
#include <string>
#include <array>
std::string exec(const char* cmd) {
std::array<char, 128> buffer;
std::string result;
std::shared_ptr<FILE> pipe(popen(cmd, "r"), pclose);
if (!pipe) throw std::runtime_error("popen() failed!");
while (!feof(pipe.get())) {
if (fgets(buffer.data(), 128, pipe.get()) != nullptr)
result += buffer.data();
}
return result;
}
This works really nicely to execute a command (e.g. std::string res = exec("ls");) and get the stdout into a string.
But what it does not do is get the command return code (pass/fail integer) or the stderr. Ideally I would like a way to get all three (return code, stdout, stderr).
I would settle for stdout and stderr. I am thinking that I need to add another pipe, but I can't really see how the first pipe is setup to get stdout so I can't think how I would change it to get both.
Any one got any ideas how to do that, or alternative approaches that may work?
update
See my complete example here
Aucun commentaire:
Enregistrer un commentaire