Sto scrivendo un programma in C++ che esegue e le uscite (in tempo reale), uno script di shell, makefile o semplicemente un altro programma. Tuttavia mi piacerebbe avere il mio programma di ritorno in modo diverso quando ci sono errori o errori.Come catturare l'exit_code e stderr del comando eseguito in C++?
#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;
}
è quello che ho finora.
Diciamo che questo script corse make
per costruire un programma e ha dato un errore in questo modo
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
E 'possibile per me sapere che questo è uscito con l'errore?
fa che uscire con il codice di
else than 0
in quanto si tratta di un errore?È che l'ultima parte è uscita nei
stderr
?
Considerando che make
terminato con il codice non 0
, diciamo 1
, ed è uscita in stderr
non è forse possibile per me catturare questi codici di uscita e il messaggio di errore, alla fine?
Come posso catturare il codice di uscita e stderr
dopo emettere i risultati del programma, e restituire il exit code
/stderr
nella funzione?
pclose restituisce uno stato di uscita. –
http://jineshkj.wordpress.com/2006/12/22/how-to-capture-stdin-stdout-and-stderr-of-child-program/ –