Как написать на стандартный ввод другого приложения? - PullRequest
7 голосов
/ 10 апреля 2010

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

app1.exe -someargs | app2.exe -someargs

Где app2 считывает весь стандартный вывод app1 в своем стандартном вводе.

Ответы [ 3 ]

8 голосов
/ 10 апреля 2010

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

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

3 голосов
/ 10 апреля 2010

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

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

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

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

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

0 голосов
/ 10 апреля 2010

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

...