Redirection de stdout d’un object de processus vers stdin d’un autre

Comment puis-je configurer deux exécutables externes pour qu’ils s’exécutent à partir d’une application où la sortie standard du premier est routée vers le second depuis stdin?

Je sais comment exécuter des programmes externes à l’aide de l’object Process, mais je ne vois pas le moyen de faire quelque chose comme “myprogram1 -some -options | myprogram2 -some -options”. Je devrai également prendre la sortie standard du deuxième programme (myprogram2 dans l’exemple).

En PHP, je voudrais juste faire ceci:

$descriptorspec = array( 1 => array("pipe", "w"), // stdout ); $this->command_process_resource = proc_open("myprogram1 -some -options | myprogram2 -some -options", $descriptorspec, $pipes); 

Et $ pipes [1] serait la sortie standard du dernier programme de la chaîne. Y a-t-il un moyen d’accomplir cela en c #?

Voici un exemple de base du câblage de la sortie standard d’un processus à l’entrée standard d’un autre.

 Process out = new Process("program1.exe", "-some -options"); Process in = new Process("program2.exe", "-some -options"); out.UseShellExecute = false; out.RedirectStandardOutput = true; in.RedirectStandardInput = true; using(StreamReader sr = new StreamReader(out.StandardOutput)) using(StreamWriter sw = new StreamWriter(in.StandardInput)) { ssortingng line; while((line = sr.ReadLine()) != null) { sw.WriteLine(line); } } 

Vous pouvez utiliser la classe System.Diagnostics.Process pour créer les 2 processus externes et lier les entrées et les sorties via les propriétés StandardInput et StandardOutput.

Utilisez System.Diagnostics.Process pour démarrer chaque processus et, dans le second processus, définissez le RedirectStandardOutput sur true et le dans le premier RedirectStandardInput true. Enfin, définissez le StandardInput du premier sur le StandardOutput du second. Vous devrez utiliser un ProcessStartInfo pour démarrer chaque processus.

Voici un exemple d’une des redirections.