Tengo un comando para Symfony/Console que descarga varios archivos a la vez usando Guzzle Pool . Ya tengo a Guzzle informando el progreso de la descarga de cada archivo, eso funciona bien.
Ahora me gustaría mejorarlo usando el asistente ProgressBar de Symfony/Console. El problema es que todos los ejemplos que encontré para ProgressBar solo usan una única barra de progreso. Necesito varias barras de progreso independientes, una para cada una de las descargas. ¿Puedes darme alguna pista de cómo lograr eso?
Encontré algo aquí: [Consola] Una mejor barra de progreso #10356
use Symfony\Component\Console\Helper\ProgressBar; use Symfony\Component\Console\Output\ConsoleOutput; $output = new ConsoleOutput(); $bar1 = new ProgressBar($output, 10); $bar2 = new ProgressBar($output, 20); $bar2->setProgressCharacter('#'); $bar1->start(); print "\n"; $bar2->start(); for ($i = 1; $i <= 20; $i++) { // up one line $output->write("\033[1A"); usleep(100000); if ($i <= 10) { $bar1->advance(); } print "\n"; $bar2->advance(); }Efecto:

Debe mover el cursor de la consola a la línea adecuada (arriba y abajo) antes de actualizar la barra. Pero funciona. Confirmo.
Con Symfony 4.1 esto es compatible sin el control manual del cursor, consulte https://symfony.com/doc/current/components/console/helpers/progressbar.html#console-multiple-progress-bars :
$section1 = $output->section(); $section2 = $output->section(); $progress1 = new ProgressBar($section1); $progress2 = new ProgressBar($section2); $progress1->start(100); $progress2->start(100); $i = 0; while (++$i < 100) { $progress1->advance(); if ($i % 2 === 0) { $progress2->advance(4); } usleep(50000); }Laravel 5.6 / linux
use Symfony\Component\Console\Helper\ProgressBar; use Symfony\Component\Console\Output\ConsoleOutput; $output = new ConsoleOutput(); $bar1 = new ProgressBar($output->section(), 10); $bar2 = new ProgressBar($output->section(), 20); $bar2->setProgressCharacter('#'); $bar1->start(); print "\n"; $bar2->start(); for ($i = 1; $i <= 20; $i++) { // up one line $output->write("\033[1A"); usleep(100000); if ($i <= 10) { $bar1->advance(); } print "\n"; $bar2->advance(); }