popen() schreibt die Ausgabe von Kommando ausgeführt, cout

Ich Schreibe eine Anwendung, öffnet sich ein weiterer Prozess und bekommen dessen Ausgabe. Online überall lese ich, ich habe mit popen und aus der Datei gelesen.

Aber ich kann nicht von Ihr Lesen. Die Ausgabe von dem Befehl bekommt die Ausgabe in der Konsole-Fenster der aufrufenden Anwendung. Unten ist der code, den ich verwende. Ich habe einige Drucke zu Debuggen.

#include <string>
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <array>

int main()
{
    //some command that fails to execute properly.
    std::string command("ls afskfksakfafkas");

    std::array<char, 128> buffer;
    std::string result;

    std::cout << "Opening reading pipe" << std::endl;
    FILE* pipe = popen(command.c_str(), "r");
    if (!pipe)
    {
        std::cerr << "Couldn't start command." << std::endl;
        return 0;
    }
    while (fgets(buffer.data(), 128, pipe) != NULL) {
        std::cout << "Reading..." << std::endl;
        result += buffer.data();
    }
    auto returnCode = pclose(pipe);

    std::cout << result << std::endl;
    std::cout << returnCode << std::endl;

    return 0;
}

Lesen ist eigentlich nie gedruckt, um meine cout und das Ergebnis ist ein leerer string. Ich sehe deutlich die Ausgabe des Befehls in meinem terminal. Wenn der Befehl ordnungsgemäß beendet werden, ist das Verhalten wie erwartet. Aber ich nur zu erfassen, die Ausgabe für Fehlerfälle.

Mit feof() zur Steuerung einer Schleife ist eine schlechte Praxis, und es ist sinnlos, in Ihrem Fall, da fgets() zurück NULL auf das Ende der Datei. Versuchen Sie bietet eine Minimale, Vollständige und Überprüfbare Beispiel, dass die Menschen verwenden können, um erstellen Sie Ihr problem. Wenn Sie nicht wissen, was das problem ist, dann bieten teilweise Informationen, wie Sie haben, ist ein guter Weg, lassen Sie sich wichtige Informationen. Es ist durchaus möglich, den Befehl, den Sie ausführen, ist mit einem bedeutet, dass der Ausgang, der nicht umleitbaren Ihre Technik.
Vollständige Beispiel. Ich habe buchstäblich gerade Hinzugefügt int main und fügte hinzu, eine einprogrammierte Befehl...

InformationsquelleAutor John Smith | 2017-06-18

Schreibe einen Kommentar