571 votes

Comment faire pour exécuter une commande et obtenir une sortie de commande dans C++ ?

Je suis à la recherche d’un moyen d’obtenir la sortie d’une commande quand il est exécuté à partir d’un programme C++. J’ai regardé à l’aide de la fonction system(), mais qui s’exécutera seulement une commande. Voici un exemple de ce que je cherche :

J’ai besoin d’exécuter une commande arbitraire et obtenir sa sortie. J’ai regardé Boost.org mais je n’ai pas trouvé quelque chose qui va me donner ce dont j’ai besoin.

753voto

waqas Points 2940
<pre><code></code><p>Remplacer popen et pclose avec _popen et _pclose pour Windows.</p></pre>

95voto

Jonathan Wakely Points 45593

Obtenant les stdout et stderr (et également écrire à stdin, non illustrée ici) sont simple comme Bonjour avec ma tête de pstreams , qui définit les classes iostream qui fonctionnent comme des `` :

37voto

Mr.Ree Points 5112

J’utiliserais popen() (++ waqas).

Mais parfois vous devez lire et écrire...

On dirait que personne ne fait des choses la manière dure plus.

(En supposant un environnement Unix/Linux/Mac, ou peut-être des fenêtres avec une couche de compatibilité POSIX...)


Vous pouvez également jouer avec select() et lectures non bloquantes.

19voto

paxdiablo Points 341644

Deux approches possibles.

1 / je ne pense pas que fait partie de la norme C++ (c’est la partie de POSIX de mémoire), mais il est disponible sur tous les UNIX j’ai travaillé avec (et vous semblez viser UNIX étant donné que votre commande est " «).

2 / sur la hors-chance qu’il n’y aucune , vous pouvez utiliser puis utilisez les fonctions d’e/s normales pour traiter le fichier de sortie.

15voto

Vous pouvez utiliser la bibliothèque Boost.Process. Il ne fait pas officiellement partie de boost bien. J’ai vu qu’il fonctionne bien pour les autres. Malheureusement, boost.process progrès apparemment a été calé. pstreams est un autre projet (apparemment actif). Certainement la peine d’essayer, je dirais - mais c’est seulement pour les systèmes d’exploitation compatible posix.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X