2016-11-27 44 views
2

因此,我对某些命令运行Symfony Process,我注意到当我将它们写入Symfony的OutputInterface时,它没有显示颜色或进度条。我认为命令(npm,artisan,ls等)使用terminal control codes,其中一个类正在吃非标准的ASCII字符。Symfony过程吃终端控制代码

编辑: 我已经做了一些挖掘和我相信Symfony默认使用它的StreamOutput类。它似乎能够输出颜色,我试过告诉它OUTPUT_RAW。那里没有豆子。也许问题出在其他地方......

有没有一种内置的方式来告诉这些类不要这样做?我怎样才能让我漂亮的输出回来?

回答

1

颜色可用性depends您正在调用的程序。 您可以尝试设置TTY/PTY:

protected function execute(InputInterface $input, OutputInterface $output) 
{ 
    $process = new Process('ls -l --color="always"'); 
    $process->setTty(true); // or $process->setPty(true); 
    $process->run(); 
    $output->write($process->getOutput()); 
} 

见相关issue

我不认为命令输出会删除转义码。下一个例子效果很好(对我来说):

protected function execute(InputInterface $input, OutputInterface $output) 
{ 
    $output->write(shell_exec('ls -l --color="always"')); // ok, output is colored 
} 

希望这会有所帮助。

+0

谢谢!他们真的应该注意'setTty'的含义是什么;像我这样的noobs可能没有意识到TTY意味着一个没有大量挖掘主题的'电传终端'。 –