Je souhaite exécuter un certain fichier de commandes et rediriger la sortie de la console vers un contrôle de texte dans Visual C++ ou rediriger la sortie de la console en même temps que les journaux/échos.Rediriger la sortie du fichier de commandes exe
Répondre
Fondamentalement, vous devez exécuter le processus d'exécution pour écrire dans un canal et lire la sortie de ce canal.
[EDIT] Je sais comment SciTE fait cela (vous pouvez jeter un oeil à la source: win32/SciTEWin.cxx, fonction ExecuteOne), j'ai cherché un peu plus générique, trouvé How to spawn console processes with redirected standard handles de Microsoft lui-même.
Si vous utilisez CreatePipe PeekNamedPipe CreateProcess mot-clé, par exemple, vous pourriez trouver d'autres exemples.
Si l'élégance n'est pas une priorité, une solution très simple pourrait être de rediriger la sortie vers un fichier, puis de lire le contenu du fichier.
Une autre option est d'utiliser Boost.Process(Boost.Process n'est pas (encore) une bibliothèque Boost C++ officielle, elle doit être téléchargée et installée séparément).
L'exemple "Child.4 - Reading from a child using asynchronous I/O" montre comment rediriger la sortie du processus enfant dans un flux C++ (et accéder ultérieurement au contenu).
Exemple "Child.4 - Reading from a child using asynchronous I/O" montrent comment utiliser Boost.Process togehter avec Boost.Asio pour accéder aux Childs E/S asynchrones .
Les avantages de cette méthode sont que Boost.Process prend en charge l'API Windows et l'API POSIX.