Я могу запустить процесс командной строки, используя process.start()
.
Я могу предоставить ввод с использованием стандартного ввода. После этого, когда процесс требует ввода пользователя снова, как моя программа может узнать и передать вход в этот exe?
Запуск интерактивной командной строки exe с помощью С#
Ответ 1
Здесь приведен пример , который похож на то, что вам нужно, используя Process.StandardInput
и StreamWriter
.
Process sortProcess;
sortProcess = new Process();
sortProcess.StartInfo.FileName = "Sort.exe";
// Set UseShellExecute to false for redirection.
sortProcess.StartInfo.UseShellExecute = false;
// Redirect the standard output of the sort command.
// This stream is read asynchronously using an event handler.
sortProcess.StartInfo.RedirectStandardOutput = true;
sortOutput = new StringBuilder("");
// Set our event handler to asynchronously read the sort output.
sortProcess.OutputDataReceived += new DataReceivedEventHandler(SortOutputHandler);
// Redirect standard input as well. This stream
// is used synchronously.
sortProcess.StartInfo.RedirectStandardInput = true;
sortProcess.Start();
// Use a stream writer to synchronously write the sort input.
StreamWriter sortStreamWriter = sortProcess.StandardInput;
// Start the asynchronous read of the sort output stream.
sortProcess.BeginOutputReadLine();
Console.WriteLine("Ready to sort up to 50 lines of text");
String inputText;
int numInputLines = 0;
do
{
Console.WriteLine("Enter a text line (or press the Enter key to stop):");
inputText = Console.ReadLine();
if (!String.IsNullOrEmpty(inputText))
{
numInputLines ++;
sortStreamWriter.WriteLine(inputText);
}
}
надеюсь, что поможет
Ответ 2
Если я правильно понимаю, я думаю, что вы должны это сделать, перенаправив стандартный ввод/вывод, используя RedirectStandardOutput и RedirectStandardInput.
В проекте WinSCP есть образец С# для связи с ним, используя этот способ. Вы можете найти его здесь: Передача файлов SFTP в .NET (хотя этот образец только собирает вывод, не используя его вообще, но метод должен быть тем же.)
Ответ 3
Вы хотите посмотреть IPC. Как показал выше роберт, класс Process
в .NET поможет вам. Но специально для вашей проблемы (как узнать, когда писать данные): Вы не можете. Не в общем.
Если вы знаете требуемый ввод (например, "yyy" ), вы можете предоставить его в STDIN
созданного процесса. Вам не нужно ждать, пока программа запросит эту информацию: она будет читать только с STDIN
, когда она хочет данных.
Если вам нужно обработать выходные данные программ, чтобы решить, что писать в STDIN
, попробуйте прочитать процессы STDOUT
. У вас могут возникнуть проблемы с промывкой, хотя...