Comment appeler une application console à partir de mon application .NET et capturer toute la sortie générée dans la console?
(N'oubliez pas que je ne veux pas enregistrer les informations d'abord dans un fichier, puis les remettre en vente car j'aimerais les recevoir en direct.)
Réponses:
Cela peut être réalisé assez facilement à l'aide de la propriété ProcessStartInfo.RedirectStandardOutput . Un exemple complet est contenu dans la documentation MSDN liée; la seule mise en garde est que vous devrez peut-être également rediriger le flux d'erreur standard pour voir toute la sortie de votre application.
la source
Console.Write
place.C'est une petite amélioration par rapport à la réponse acceptée de @mdb . Plus précisément, nous capturons également la sortie d'erreur du processus. De plus, nous capturons ces sorties via des événements car
ReadToEnd()
cela ne fonctionne pas si vous souhaitez capturer à la fois l' erreur et la sortie régulière. Il m'a fallu du temps pour que cela fonctionne car cela nécessite également desBeginxxxReadLine()
appels aprèsStart()
.Manière asynchrone:
la source
Utilisez ProcessInfo.RedirectStandardOutput pour rediriger la sortie lors de la création de votre processus de console.
Ensuite, vous pouvez utiliser Process.StandardOutput pour lire la sortie du programme.
Le deuxième lien a un exemple de code comment le faire.
la source
ConsoleAppLauncher est une bibliothèque open source spécialement conçue pour répondre à cette question. Il capture toute la sortie générée dans la console et fournit une interface simple pour démarrer et fermer l'application console.
L'événement ConsoleOutput est déclenché chaque fois qu'une nouvelle ligne est écrite par la console dans la sortie standard / d'erreur. Les lignes sont mises en file d'attente et sont garanties de suivre l'ordre de sortie.
Également disponible en tant que package NuGet .
Exemple d'appel pour obtenir la sortie complète de la console:
Échantillon avec commentaires en direct:
la source
J'ai ajouté un certain nombre de méthodes d'aide à la plate-forme O2 (projet Open Source) qui vous permettent de programmer facilement une interaction avec un autre processus via la sortie et l'entrée de la console (voir http://code.google.com/p/o2platform/ source / parcourir / trunk / O2_Scripts / APIs / Windows / CmdExe / CmdExeAPI.cs )
L'API qui permet de visualiser la sortie de la console du processus en cours (dans un contrôle existant ou une fenêtre contextuelle) peut également vous être utile. Voir ce billet de blog pour plus de détails: http://o2platform.wordpress.com/2011/11/26/api_consoleout-cs-inprocess-capture-of-the-console-output/ (ce blog contient également des détails sur la façon de consommer la sortie console des nouveaux processus)
la source
J'ai fait une version réactive qui accepte les rappels pour stdOut et StdErr.
onStdOut
etonStdErr
sont appelés de manière asynchrone,dès que les données arrivent (avant la fin du processus).
Exemple d'utilisation
Ce qui suit fonctionnera
executable
avecargs
et imprimeraà la console.
la source
Depuis PythonTR - Python Programcıları Derneği, e-kitap, örnek :
la source
Ajouté
process.StartInfo.**CreateNoWindow** = true;
ettimeout
.la source
StandardOutput.ReadToEnd()
il ne reviendra pas à l'instruction suivante avant la fin de l'application. donc votre timeout dans WaitForExit (timeoutMilliseconds) ne fonctionne pas! (votre code va se bloquer!)