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#?
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);
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With