Comment capturer le exit_code et le stderr de la commande qui est exécutée en C ++?

Je suis en train d'écrire un programme en c++ qui s'exécute et sorties (en temps réel) d'un script shell, makefile ou juste un autre programme. Cependant, je voudrais avoir mon programme de retour différemment quand il y a des erreurs ou pas d'erreur.

#include "execxi.h"



using namespace std;


int execXI::run(string command)
{

    FILE *in;
    char buff[512];
    //is this the check for command execution exited with not 0?
    if(!(in = popen(command.c_str(), "r"))){
            //I want to return the exit code and error message too if any
        return 1;
    }
    //this part echoes the output of the command that's executed
    while(fgets(buff, sizeof(buff), in)!=NULL){
        cout << buff;
    }
    pclose(in);
    return 0;



}

est ce que j'ai jusqu'à présent.

Disons que ce script s'est exécuté make de construire un programme et qu'il a donné une erreur comme

on_target_webkit_version out/Release/obj/gen/webkit_version.h
Traceback (most recent call last):
  File "../build/webkit_version.py", line 107, in <module>
    sys.exit(main())
  File "../build/webkit_version.py", line 103, in main
    return EmitVersionHeader(*sys.argv[1:])
  File "../build/webkit_version.py", line 86, in EmitVersionHeader
    webkit_revision = GetWebKitRevision(webkit_dir, version_file)
  File "../build/webkit_version.py", line 60, in GetWebKitRevision
    version_info = lastchange.FetchVersionInfo(
AttributeError: 'module' object has no attribute 'FetchVersionInfo'
make: *** [out/Release/obj/gen/webkit_version.h] Error 1
  • Est-il possible pour moi de savoir que ce est arrêté avec l'erreur?
    • Ne fait que sortir avec le code else than 0 puisque c'est une erreur?
    • Est cette dernière partie imprimée en stderr?

Considérant que make terminé avec le code pas 0disons 1et la sortie en stderr il n'est pas possible pour moi de saisir ces codes de sortie et le message d'erreur à la fin?

Comment puis-je capturer le code de sortie et stderr après avoir affiché les résultats du programme, et le retour de la exit code/stderr dans la fonction?

source d'informationauteur Logan