Redirecting stdout of one process object to stdin of another
c#, ipc
Solution
Here's a basic example of wiring the standard output of one process to the standard input of another.
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))
{
string line;
while((line = sr.ReadLine()) != null)
{
sw.WriteLine(line);
}
}
Problem
How can I set up two external executables to run from a c# application where stdout from the first is routed to stdin from the second? I know how to run external programs by using the Process object, but I don't see a way of doing something like "myprogram1 -some -options | myprogram2 -some -options". I'll also need to catch the stdout of the second program (myprogram2 in the example). In PHP I would just do this: ``` $descriptorspec = array( 1 => array("pipe", "w"), // stdout ); $this->command_process_resource = proc_open("myprogram1 -some -options | myprogram2 -some -options", $descriptorspec, $pipes); ``` And $pipes[1] would be the stdout from the last program in the chain. Is there a way to accomplish this in c#?