重复地将输入馈送到一个过程'标准输入

本文关键字:一个 过程 标准输入 输入 | 更新日期: 2023-09-27 18:02:47

我有一个维护状态的(c#)控制台应用程序。可以通过控制台向应用程序提供各种输入来改变状态。我需要能够为应用程序提供一点输入,然后读取输出,然后重复。

我创建了一个新流程,并完成了所有重定向输入/输出的正常工作。问题是,在我发送输入并在标准输出上调用ReadLine()之后,在我在标准输入上调用Close()之前,它没有返回值,之后我不能再写入输入流。

如何在接收输出的同时保持打开输入流?

 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();

我重定向IO的控制台应用程序非常简单。它使用Console.Read()从控制台读取数据,并使用Console.Write()向控制台写入数据。我确信这个数据是可读的,因为我有另一个应用程序使用标准输出/输入(不是用。net编写的)从它读取。

重复地将输入馈送到一个过程'标准输入

这是因为您正在使用Write("ready"),这将添加一个字符串到文本,而不是使用WriteLine("ready")