Компонент Progressbar, отображаемый на нескольких строках в Symfony

Я использую компонент прогрессбар в простой командной задаче с Symfony2 (2.6.6).

Мой код такой:

...
$progress = new ProgressBar($output, $total);
$progress->start();

if (($handler = fopen($file, "r")) !== FALSE) {
while (($row = fgetcsv($handler, 1000, ",")) !== FALSE) {
$this->whatever();
$progress->advance();
}
fclose($handler);
$progress->finish();
}
...

И вывод выглядит так:

  0/50 [>---------------------------]   0%
5/50 [==>-------------------------]  10%
10/50 [=====>----------------------]  20%
15/50 [========>-------------------]  30%
20/50 [===========>----------------]  40%
25/50 [==============>-------------]  50%
30/50 [================>-----------]  60%
35/50 [===================>--------]  70%
40/50 [======================>-----]  80%
45/50 [=========================>--]  90%
50/50 [============================] 100

Индикатор выполнения не перезагружается, появляется в новой строке с каждым ->advance(), Я уверен, что функция ->whatever(); ничего не делать с выводом.

Кто-нибудь знает, почему это поведение? Спасибо вам!

Извините за мой английский

6

Решение

Ты можешь использовать setOverwrite() при инициализации индикатора выполнения:

$progress = new ProgressBar($output, $total);
$progress->setOverwrite(true);

$progress->start();
...

Это определяет, следует ли перезаписать индикатор выполнения или создать новую строку строки.http://api.symfony.com/3.0/Symfony/Component/Console/Helper/ProgressBar.html#method_setOverwrite

4

Другие решения

Вы бы предпочли использовать класс SymfonyStyle (sf> = 2.7), поскольку Console Helper теперь устарела.

Вот несколько фиктивных примеров:

protected function execute(InputInterface $input, OutputInterface $output)
{
$console = new SymfonyStyle($input, $output);
$console->title('Dummy progressBar example');
$console->progressStart(100);
for ($i = 0; $i < 100; $i++) {
// do something
sleep(1);
$console->progressAdvance();
}
$console->progressFinish(); // force progress
$console->success('Dummy progressBar example complete!');
}
0

вы можете попробовать $ output-> setDecorated (true);

-1
По вопросам рекламы [email protected]