Como capturar o exit_code e stderr do comando que é executado em C ++?
Estou escrevendo um programa em c ++ que executa e gera (em tempo real) um script de shell, makefile ou apenas outro programa. No entanto, eu gostaria de ter meu programa retornar de forma diferente quando há erros ou nenhum erro.
#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;
}
é o que eu tenho até agora.
Digamos que este script foi executadomake
para construir um programa e deu um erro assim
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
É possível para mim saber que isso saiu com erro?
Isso sai com códigoelse than 0
desde que é um erro?
Essa última parte é produzida emstderr
?
Considerando quemake
saiu com código não0
, Digamos1
, e saída emstderr
não é possível capturar esses códigos de saída e mensagens de erro no final?
Como posso capturar o código de saída estderr
depois de produzir os resultados do programa, e devolver oexit code
/ stderr
na função?