Чтение процесса, вывод, ожидание определенного вывода и немедленное завершение - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть .bat файл, который запускает appium сервер (appium командная строка), и я делаю это через .bat файл:

var process = new Process();
var startinfo = new ProcessStartInfo("cmd.exe", @"/C c:\tools\start_appium_aerver.bat");
startinfo.RedirectStandardOutput = true;
startinfo.UseShellExecute = false;
process.StartInfo = startinfo;
process.OutputDataReceived += (sender, args) => Console.WriteLine(args.Data); // do whatever processing you need to do in this handler
process.Start();
process.BeginOutputReadLine();

Когда запускается appium, я хочу узнать, успешно ли запускается сервер, прочитав вывод process и дождавшись определенной строки:

appium server start listening

В этот момент, когда я нашел эту строку и узнал, что мой сервер разрушается, вместо использования этой команды и подождите несколько секунд:

// Wait until appium server starts 
process.WaitForExit(30000);

Я хочу иметь возможность немедленно завершить работу (использование process.WaitForExit без какого-либо значения - плохая идея, поскольку сервер работает постоянно)

Есть предложения?

1 Ответ

0 голосов
/ 05 апреля 2019

Сделайте так, чтобы ваш обработчик вызова OutputDataReceived Environment.Exit, как только он увидит необходимый текст, чтобы сообщить, что ваш сервер запущен.

Вы все еще можете захотеть, чтобы блок кода, который создал Process, использовал WaitForExit (с таймаутом или без него), если это единственный активный поток переднего плана в вашем приложении, просто чтобы остановить ваш выход слишком рано (событие насколько мне известно, обработчика на OutputDataReceived недостаточно, чтобы ваш процесс продолжался, если в процессе не осталось потоков переднего плана)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...