How to write to the stdin of another app?
I have a module that reads the StandardError of a process. Everything works fine, but I want to do something different. I don't know how to redirect stdin like the native way:
开发者_JAVA百科app1.exe -someargs | app2.exe -someargs
Where app2 reads all the stdout of app1 in its stdin.
Once you have the Process
object representing the process you want to communicate with (either because you got it from the OS using the static method Process.GetProcesses
, or because you created it yourself), you can attach a StreamWriter
to the Process.StandardInput
property and use that to write to the stdin of the process. Don't forget to set ProcessStartInfo.RedirectStandardInput
on your newly created process to true
.
On a related note, you can use a StreamReader
on the Process.StandardOutput
to read the output (like reading from StandardError
).
Have a look at the MSDN reference documentation for the following (both to be found in the System.Diagnostics
namespace):
Process.StandardInput
ProcessStartInfo.RedirectStandardInput
.
There's an example showing how to start a child process and write directly to its standard input.
For your particular example, here's how you set things up:
app1 starts app2 as a child process using the
Process
class (see links above).app1 writes to app2's standard input by writing to the
.StandardInput
stream of theProcess
object associated with app2.app2 just reads lines from its standard input (e.g. via
Console.ReadLine()
).
I had to use BinaryWriter, this article explains all: BinaryWriter and StdIn
精彩评论