ProgressBar输出似乎填充控制台输出

时间:2015-01-27 11:29:57

标签: symfony symfony-console

我试图将Symfony的控制台输出组件包含到现有的非Symfony应用程序中,总体而言,它进展顺利。

似乎还有一件事似乎是让我无法理解的是,如果我使用ProgressBar类,它似乎按进度条的宽度填充我发送的所有输出。

这里是代码的粗略概述(删除了各种不必要的内容):

public function run() {
    $this->logger = new \Symfony\Component\Console\Output\StreamOutput(fopen('php://stdout', 'w'));
    $this->logger->setVerbosity(\Symfony\Component\Console\Output\OutputInterface::VERBOSITY_DEBUG);
    $this->progress = new \Symfony\Component\Console\Helper\ProgressBar($this->logger);

    $this->progress->start();
    $this->doStepOne();
    $this->progress->finish();
}

public function doStepOne() {
    $i = 1;
    while($i < 10000000000) {
        $this->info(sprintf('Sweet, done a thing on page #%d', $i));
    }
}

public function info($message) {
    $this->log(sprintf("<info>%s</info>", $message));
}

public function log($message) {
    // This follows advice from http://symfony.com/doc/current/components/console/helpers/progressbar.html indicating that if you output content, you should ->clear() first and ->display() after.
    // If I don't do this, then the progress bar is output on every line, immediately followed by $message
    $this->progress->clear();
    $this->logger->writeln($message);
    $this->progress->advance();
    $this->progress->display();
}

所以这一切看起来都非常简单。再一次,我没有在Symfony控制台输出中使用它,所以也许这就是原因,但它看起来很奇怪,所以我想我是否会看到是否有其他人遇到它。我使用Google-fu无法找到任何东西,但也许它很弱?

示例(忽略^ C字符,即Ctrl-C终止进程): 此外,为了消除任何混淆 - 第一行可见没有缩进我已添加,第二行有一个缩进的空格字符我和已插入自己,抱歉有任何困惑。 Example of the issue

1 个答案:

答案 0 :(得分:0)

我还使用start_urls = ['url.com/=%d' %(n) for n in range(0, 20)] * MEANS from 0 to 20 流使用Symfony 2.7观察到了这一点。我“修复”它的方法是手动将ANSI delete-to-start序列插入到输出中。修改您的代码,即:

ConsoleOutput

不漂亮。

从2.8开始,此行为仍然存在。我不确定这是不是一个bug。看起来好像。