我有一个(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编写)从中读取。
答案 0 :(得分:4)
这种情况正在发生,因为您正在使用Write("ready")
,它会在文本中附加一个字符串,而不是WriteLine("ready")
。那很简单:)。