Повторная подача входных данных в стандартный процессный ввод - PullRequest
6 голосов
/ 17 июля 2011

У меня есть консольное приложение (C #), которое поддерживает состояние.Состояние может быть изменено путем подачи приложения с различным вводом через консоль.Мне нужно иметь возможность одновременно подавать в приложение немного ввода, затем читать промывку и повторять.

Я создаю новый процесс и выполняю всю обычную работу по перенаправлению ввода / вывода.Проблема в том, что после того, как я отправил ввод и вызвал ReadLine() на стандартном выходе, он не возвращает значение, прежде чем я вызову Close() на стандартном вводе, после чего я больше не могу записывать в поток ввода.1006 * Как сохранить открытый поток ввода при получении вывода?

 var process = new Process
                          {
                              StartInfo =
                                  {
                                      FileName =
                                          @"blabal.exe",
                                      RedirectStandardInput = true,
                                      RedirectStandardError = true,
                                      RedirectStandardOutput = true,
                                      UseShellExecute = false,
                                      CreateNoWindow = true,
                                      ErrorDialog = false
                                  }
                          };


        process.EnableRaisingEvents = false;

        process.Start();

        var standardInput = process.StandardInput;
        standardInput.AutoFlush = true;
        var standardOutput = process.StandardOutput;
        var standardError = process.StandardError;

        standardInput.Write("ready");
        standardInput.Close(); // <-- output doesn't arrive before after this line
        var outputData = standardOutput.ReadLine();

        process.Close();
        process.Dispose();

Консольное приложение, из которого я перенаправляю ввод-вывод, очень простое.Он читает из консоли, используя Console.Read(), и записывает в нее, используя Console.Write().Я точно знаю, что эти данные доступны для чтения, так как у меня есть другое приложение, которое читает из них, используя стандартный вывод / ввод (не записан в .NET).

1 Ответ

4 голосов
/ 17 июля 2011

Это происходит из-за того, что вы используете Write("ready"), который добавит строку к тексту, вместо этого используйте WriteLine("ready").это просто:).

...