У меня есть консольное приложение (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();
Консольное приложение, из которого я перенаправляю ввод-вывод, очень простое. Он читает из консоли с помощью Console.Read ()
и записывает в нее с помощью Console.Write ()
. Я точно знаю, что эти данные доступны для чтения, поскольку у меня есть другое приложение, которое читает из них, используя стандартный ввод / вывод (не написанный на .NET).