Я не думаю, что есть простой способ нарисовать индикатор выполнения, потому что, насколько я могу судить, невозможно определить, какая часть данных обрабатывается.Вообще говоря, вы можете запустить процесс, а затем использовать обратный вызов в wait()
, чтобы попытаться получить текущий вывод и рассчитать прогресс по нему.Так что ваш код может выглядеть примерно так.Вам все еще нужно заменить TODO реальной логикой, чтобы определить, сколько нужно продвигать.
$process new Process(
"git clone {$this->getGitUrl(true)} {$name}" // does clone the repo works
);
$progressBar = new ProgressBar($output, 100);
$process->start();
$progressBar->start();
$process->wait(function($type, $buffer) use ($progressBar) {
// TODO: Read the current output from buffer and determine progress
$progressBar->advance();
});
$progressBar->finish();