2010-04-10 8 views
5

J'ai un module qui lit l'erreur StandardError d'un processus. Tout fonctionne bien, mais je veux faire quelque chose de différent. Je ne sais pas comment rediriger stdin comme la façon native:Comment écrire sur le fichier stdin d'une autre application?

app1.exe -someargs | app2.exe -someargs

Où App2 lit toutes les stdout de app1 dans son stdin.

+0

Cette réponse devrait vous donner une bonne idée [C# Console recevoir entrée avec tuyau] (http://stackoverflow.com/questions/ 199528/c-console-receive-input-avec-pipe) –

+0

Mais la deuxième application n'est pas écrite par moi. J'ai besoin d'envoyer des octets au sous-processus, pas les recevoir. – blez

+0

@blez, ça devrait être assez évident. L'écriture est le contraire de la lecture. Lorsque la réponse liée vous dit de lire depuis la console, vous écrivez à la console. –

Répondre

3

Jetez un oeil à la documentation de référence MSDN pour les suivants (les deux se trouvent dans l'espace de noms System.Diagnostics):

Pour votre exemple particulier, voici comment vous définissez les choses:

  1. APP1 commence App2 comme un processus enfant à l'aide de la classe Process (voir les liens ci-dessus).

  2. app1 écrit App2 entrée standard de en écrivant au courant .StandardInput de l'objet Process associé à App2. Lit uniquement des lignes à partir de son entrée standard (par exemple, via Console.ReadLine()).

8

Une fois que vous avez l'objet Process représentant le processus que vous voulez communiquer avec (soit parce que vous avez obtenu à partir du système d'exploitation en utilisant la méthode statique Process.GetProcesses, ou parce que vous avez créé vous-même), vous pouvez joindre un StreamWriter à la propriété Process.StandardInput et utilisez cela pour écrire dans le fichier stdin du processus. N'oubliez pas de définir ProcessStartInfo.RedirectStandardInput sur votre processus nouvellement créé sur true. Sur une note connexe, vous pouvez utiliser un StreamReader sur le Process.StandardOutput pour lire la sortie (comme lire à partir de StandardError).

Questions connexes