Spúšťam proces cez posix popen()
Funkcie. Napr. git push, mkdir x atď.
Môžem čítať výstup z týchto príkazov ľahko tým, že uložíte do vyrovnávacej pamäte takto:
#include <iostream>
#include <stdio.h>
using namespace std;
int main() {
FILE *in;
char buff[512];
if(!(in = popen("mkdir x", "r"))){
return 1;
}
// fgets stores the output into buff
while(fgets(buff, sizeof(buff), in)!=NULL){
cout << buff;
}
pclose(in);
return 0;
}
Ale ak sa vyskytne chyba v procese, napr. mkdir zlyhá, potom chcem čítať chybu do reťazca alebo vyrovnávacej pamäte znakov.
Avšak s vyššie uvedeným kódom, ak to zlyhá, chyba nie je uložená v vyrovnávacej pamäti. Myslím, že je to preto, že chyba je presmerovaná na štandardnú chybu namiesto štandardného vstupu.
Ako môžem upraviť kód uvedený vyššie, aby som dostal chybovú správu vrátenú bash / proces?
odpovede:
2 pre odpoveď č. 1Môžete zadať presmerovanie v priečinku popen
volanie metódy:
popen("mkdir x 2>&1", "r")
Potom budete môcť prečítať chybovú správu z vyrovnávacej pamäte.