繁体   English   中英

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

[英]Prompt user for input from application started via Process.start()

我目前正在创建一个控制台应用程序来与 git 交互。 这适用于将我的命令的 output 重定向到控制台应用程序,但现在一些命令提示输入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);
                }

您需要异步读取 output 和错误; 这既可以让您同时读取用户的输入,又可以避免标准错误缓冲区已满时挂起(您只能在标准 output 结束后读取它,这还不够)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM