Как написать в stdin другого приложения?

У меня есть модуль, который читает StandardError процесса. Все работает нормально, но я хочу сделать что-то другое. Я не знаю, как перенаправить stdin как родной так:

app1.exe -someargs | app2.exe -someargs

где app2 считывает все stdout app1 в своем stdin.

3 ответов


посмотрите справочную документацию MSDN для следующего (оба можно найти в System.Diagnostics пространство имен):

для вашего конкретного примера, вот как вы все вверх:

  1. приложения app1 начинается приложения app2 как дочерний процесс с помощью Process класса (см. ссылки выше).

  2. приложения app1 пишет приложения app2стандартный ввод путем записи в .StandardInput поток Process объект, связанный с приложения app2.

  3. приложения app2 просто читает строки из стандартного ввода (например, через Console.ReadLine()).


после Process объект, представляющий процесс, с которым вы хотите общаться (либо потому, что вы получили его из ОС, используя статический метод Process.GetProcesses, или потому, что вы создали его самостоятельно), можно добавить StreamWriter до Process.StandardInput свойство и использовать его для записи в stdin процесса. Не забудьте установить ProcessStartInfo.RedirectStandardInput на вашем вновь созданном процессе в true.

на a связанные Примечание, Вы можете использовать StreamReader на Process.StandardOutput читать выход (как чтение StandardError).


Мне пришлось использовать BinaryWriter, эта статья объясняет все: BinaryWriter и StdIn