Wie erfassen Sie die exit_code und stderr des Befehls, der ausgeführt wird in C++?
Ich Schreibe ein c++ - Programm, das wird ausgeführt, und die Ausgänge (in Echtzeit) ein shell-Skript, makefile oder nur ein anderes Programm. Allerdings würde ich gerne mein Programm zurück, anders, wenn es Fehler oder kein Fehler.
#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;
}
ist was ich habe, so weit.
Sagen wir, das script lief make
ein Programm erstellen und es gab einen Fehler, wie so
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
-
Ist es möglich für mich zu wissen, dass diese beendet wird mit dem Fehler?
-
Nicht, dass die Ausfahrt mit code
else than 0
da ist es ein Fehler? -
Ist, dass der Letzte Teil ausgegeben, die in
stderr
?
-
Wenn man bedenkt, dass make
beendet mit code nicht 0
sagen wir mal 1
und es Ausgang in stderr
ist es mir nicht möglich zu erfassen, diese exit-codes und Fehlermeldung am Ende?
Wie kann ich erfassen der exit-code und die stderr
nach Ausgabe der Ergebnisse des Programms und der Rückkehr der exit code
/stderr
in der Funktion?
InformationsquelleAutor der Frage Logan | 2013-02-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie daran interessiert sind, den Fehler-code, dies ist ein portabler Weg, um es statt der Division durch 256:
Jedoch
popen
ist ein Weg, so sind Sie entweder weitere workarounds, die durch die übliche Umleitung Stil in der shell, oder Sie Folgen dieser ungeprüften code um es richtig zu machen:Der code ist von hier:
http://jineshkj.wordpress.com/2006/12/22/how-to-capture-stdin-stdout-and-stderr-of-child-program/
InformationsquelleAutor der Antwort lpapp
Bekommen von http://bytes.com/topic/c/answers/131694-pclose-returning-termination-status-command
Meine Antwort wäre
pclose(in)/256
ist der exit-code.Weiß ich noch nicht, wie capture stderr oder sdtout anders, aber bis es eine Antwort, die ich akzeptiere dies als meine Antwort.
InformationsquelleAutor der Antwort Logan
Danke für die Antwort über exit-code Logan.
Glaube ich, dass ein round-trip zu bekommen stderr wäre umgeleitet werden in eine temporäre Datei:
InformationsquelleAutor der Antwort Wtower