我在Symfony2(2.6.6)的简单命令任务中使用progressbar component。
我的代码是这样的:
...
$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();
对输出没有任何作用。
任何人都知道为什么会这样做?谢谢你!
抱歉我的英文
答案 0 :(得分:4)
初始化进度条时可以使用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
答案 1 :(得分:0)
您宁愿使用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!');
}
答案 2 :(得分:-1)
您可以尝试$ output-&gt; setDecorated(true);