提示用户输入通过Process.start()启动的应用程序



我目前正在创建一个控制台应用程序与git交互。这可以很好地将命令的输出重定向到控制台应用程序,但现在有些命令提示输入,如PassPhrasey/n for owerwrite。如何重定向这些提示并要求用户输入。

var process = new Process();
process.StartInfo.CreateNoWindow = false;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.WorkingDirectory = workDir;
process.StartInfo.FileName = appName;
process.StartInfo.Arguments = argument;
process.Start();
var output = new List<string>();

while (process.StandardOutput.Peek() > -1)
{
output.Add(process.StandardOutput.ReadLine());
}
while (process.StandardError.Peek() > -1)
{
output.Add(process.StandardError.ReadLine());
}
process.WaitForExit();
foreach (var opt in output)
{
Console.WriteLine(opt);
}

需要异步读取输出和出错;这将使您可以同时从用户读取输入,并避免在标准错误缓冲区满时挂起(您只在标准输出结束后读取它,这是不够的)。

进程不请求输入;它们只是读取输入流(当然,当使用标准输入时)。解决这个问题的最简单的方法是继续阅读您的标准输入,并将接收到的数据发布到您的"托管"的标准输入。过程。

最新更新