Как написать в stdin другого приложения?
У меня есть модуль, который читает StandardError процесса. Все работает нормально, но я хочу сделать что-то другое. Я не знаю, как перенаправить stdin как родной так:
app1.exe -someargs | app2.exe -someargs
где app2 считывает все stdout app1 в своем stdin.
3 ответов
посмотрите справочную документацию MSDN для следующего (оба можно найти в System.Diagnostics
пространство имен):
ProcessStartInfo.RedirectStandardInput
.
есть пример, показывающий, как запустить дочерний процесс и написать непосредственно на его стандартный ввод.
для вашего конкретного примера, вот как вы все вверх:
приложения app1 начинается приложения app2 как дочерний процесс с помощью
Process
класса (см. ссылки выше).приложения app1 пишет приложения app2стандартный ввод путем записи в
.StandardInput
потокProcess
объект, связанный с приложения app2.приложения app2 просто читает строки из стандартного ввода (например, через
Console.ReadLine()
).
после Process
объект, представляющий процесс, с которым вы хотите общаться (либо потому, что вы получили его из ОС, используя статический метод Process.GetProcesses
, или потому, что вы создали его самостоятельно), можно добавить StreamWriter
до Process.StandardInput
свойство и использовать его для записи в stdin процесса. Не забудьте установить ProcessStartInfo.RedirectStandardInput
на вашем вновь созданном процессе в true
.
на a связанные Примечание, Вы можете использовать StreamReader
на Process.StandardOutput
читать выход (как чтение StandardError
).
Мне пришлось использовать BinaryWriter, эта статья объясняет все: BinaryWriter и StdIn