¿Cómo capturar el código de salida y el comando stderr del comando que se ejecuta en C ++?
Estoy escribiendo un programa c ++ que ejecuta y genera (en tiempo real) un script shell, makefile o simplemente otro programa. Sin embargo, me gustaría que mi programa regrese de manera diferente cuando hay errores o ningún error.
#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;
}
Es lo que tengo hasta ahora.
Digamos que este script corriómake
para construir un programa y dio un error como tal
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
¿Es posible que sepa que esto salió con error?
¿Eso sale con código?else than 0
ya que es un error?
Es que la última parte de salida enstderr
?
Teniendo en cuenta quemake
Salido con código no0
, digamos1
, y sale enstderr
¿No me es posible capturar estos códigos de salida y el mensaje de error al final?
¿Cómo puedo capturar el código de salida ystderr
después de emitir los resultados del programa, y devolver elexit code
/ stderr
en la funcion?