popen() écrit la sortie de la commande exécutée pour le cout

Je suis en train d'écrire une application qui doit ouvrir un autre processus et d'obtenir la sortie de la. En ligne j'ai lu partout que j'ai utiliser popen et de lire le fichier.

Mais je ne peux pas lire de lui. La sortie de la commande est de sortie dans la fenêtre de la console de l'application appelante. Ci-dessous le code que j'utilise. J'ai ajouté quelques impressions à déboguer.

#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;
}

La lecture n'est jamais réellement imprimé à la ma cout et le résultat est une chaîne vide. Je vois clairement la sortie de la commande dans mon terminal. Si la commande sort normalement le comportement est comme prévu. Mais je ne capturer la sortie pour les cas d'erreur.

À l'aide de feof() pour contrôler une boucle est une mauvaise pratique, et il est inutile dans votre cas puisque fgets() retourne NULL sur la fin du fichier. Essayez de fournir un un Minimum, Complètes et Vérifiables exemple que les gens peuvent utiliser pour recréer votre problème. Si vous ne savez pas quel est le problème, puis en fournissant des informations partielles que vous avez est un bon moyen de laisser de côté des informations essentielles. Il est tout à fait possible de la commande, vous êtes en cours d'exécution est l'utilisation d'un moyen de sortie qui n'est pas redirigeables b à l'aide de votre technique.
Fourni complet exemple. J'ai littéralement juste ajouté int main et a ajouté une codé en dur de commande...

OriginalL'auteur John Smith | 2017-06-18