2015-04-17 13 views
5

Używam progressbar component w prostym zadaniu polecenia z Symfony2 (2.6.6).Składnik paska postępu wyświetlany na wielu liniach Symfony

Mój kod to tak:

... 
$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(); 
} 
... 

a wyjście wygląda następująco:

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 

Pasek postępu nie jest przeładunek się, pojawia się w nowej linii z każdego ->advance(). Jestem pewien, że funkcja ->whatever(); nic nie robi z wyjściem.

Ktoś wie, dlaczego to zachowanie? Dzięki Ci!

Przepraszam za mój angielski

+5

- linie z [SymfonyDoc] (http://symfony.com/doc/current/components/console/helpers/progressbar.html), Czy o to pytasz? – xurshid29

+0

Tak @ xurshid29! Nie widziałem tej wiadomości !! Dziękuję Ci! –

+0

@ xurshid29: możesz dodać ten komentarz jako odpowiedź. –

Odpowiedz

3

Można użyć setOverwrite() podczas inicjalizacji pasek postępu:

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

$progress->start(); 
... 

ten określa, czy nadpisać progressbar, lub utworzyć nową linię linii. http://api.symfony.com/3.0/Symfony/Component/Console/Helper/ProgressBar.html#method_setOverwrite

+0

Co to dokładnie robi? Trzeba wyjaśnić swoją odpowiedź – Machavity

+0

To właściwie jest prawdziwa odpowiedź na to pytanie. Zmienię to teraz, by wyglądać lepiej –

0

Wolisz używać klasy SymfonyStyle (sf> = 2.7), ponieważ program Console Helper jest teraz przestarzały.

Oto przykład obojętne „Jeśli platforma nie obsługuje kody ANSI, aktualizacje paska postępu są dodawane jako nowe linie”

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!'); 
} 
Powiązane problemy