Как перехватить exit_code и stderr команды, которая запускается в C ++?
Я пишу программу на C ++, которая выполняет и выводит (в режиме реального времени) сценарий оболочки, make-файл или просто другую программу. Однако я хотел бы, чтобы моя программа возвращалась по-другому, когда есть ошибки или нет ошибок.
#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;
}
это то, что я до сих пор
Допустим, этот скрипт выполнялсяmake
чтобы построить программу, и это выдало ошибку, как так
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
Могу ли я узнать, что это произошло с ошибкой?
Это выходит с кодомelse than 0
так как это ошибка?
Это последняя часть выведена вstderr
?
Учитывая, чтоmake
выход с кодом не0
скажем1
и вывод вstderr
я не могу захватить эти коды выхода и сообщение об ошибке в конце?
Как я могу захватить код выхода иstderr
после вывода результатов программы и возвратаexit code
/ stderr
в функции?