Php 如何在同一行上显示Laravel artisan命令输出?
我想用一系列简单的点来显示处理进度。这在浏览器中很容易,只需执行Php 如何在同一行上显示Laravel artisan命令输出?,php,laravel,laravel-4,Php,Laravel,Laravel 4,我想用一系列简单的点来显示处理进度。这在浏览器中很容易,只需执行echo'。并在同一行上执行,但在向artisan命令行发送数据时,如何在同一行上执行此操作 以后每次调用$this->info('.')都会将点放在新行上。如果您查看源代码,就会发现$this->info实际上只是$this->output->writeln的快捷方式 您可以使用$this->output->write('.')将其内联 如果您发现自己经常使用此方法,您可以创建自己的帮助器方法,如: public function
echo'。
并在同一行上执行,但在向artisan命令行发送数据时,如何在同一行上执行此操作
以后每次调用
$this->info('.')
都会将点放在新行上。如果您查看源代码,就会发现$this->info
实际上只是$this->output->writeln
的快捷方式
您可以使用$this->output->write('.')
将其内联
如果您发现自己经常使用此方法,您可以创建自己的帮助器方法,如:
public function inlineInfo($string)
{
$this->output->write("<info>$string</info>");
}
公共函数inlineInfo($string)
{
$this->output->write($string);
}
方法info使用writeln,它在末尾添加了一个换行符,您需要使用write
可能有点话题,因为你只想要一系列的点。但是,您可以使用Laravel中的内置功能轻松地在artisan命令中显示进度条 声明一个类变量,如下所示:
protected $progressbar;
foreach (Model::all() as $instance)
{
$this->progressbar->advance(); //do stuff before or after this
}
然后像这样初始化进度条,比如在fire()方法中:
然后像这样做:
protected $progressbar;
foreach (Model::all() as $instance)
{
$this->progressbar->advance(); //do stuff before or after this
}
并通过调用以下命令来限定进度:
$this->progressbar->finish();
更新:对于Laravel 5.1+更简单的语法更方便:
$bar=$this->output->createProgressBar(count($foo))代码>
$bar->Advance()代码>
$bar->Finish()代码>
没问题,我刚才还在谷歌上搜索同样的问题,无意中发现了进度条解决方案,尽管文档记录得很差,如果有文档记录的话。我想这个答案可能会帮助人们更快地找到它,因为它是一种以一种很好的方式显示进度的便捷方式。是否有一种方法可以显示命令行输出,例如使用
$this->error()
,而不会中断progressbar?如果使用new\Symfony\Component\Console\Helper\progressbar>5.2,您可以得到一个progressbar实例($this->output)
@eComEvo你找到解决问题的方法了吗?我面临同样的问题使用$this->command->getOutput()->在播种机内部写入(//…
)