Redirecting stdout of one process object to stdin of another

How to configure two external executables to run from a C # application, where stdout from the first goes to stdin from the second?

I know how to run external programs using the Process object, but I see no way to do something like "myprogram1-some -options | myprogram2-some -options". I 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] will be stdout from the last program in the chain. Is there any way to do this in C #?

+3
source share
3 answers

Here is a basic example of connecting the standard output of one process to the standard inputs 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);
  }
}
+10

System.Diagnostics.Process StandardInput StandardOutput.

0

System.Diagnostics.Process, , RedirectStandardOutput true, RedirectStandardInput true. , StandardInput StandardOutput . ProcessStartInfo .

.

0

All Articles