Symfony进程使用终端控制代码

时间:2016-11-27 05:41:01

标签: symfony vt100 symfony-process

所以我为某些命令运行了一个Symfony Process,我注意到当我把它们写到Symfony的OutputInterface时,它没有显示颜色或进度条。我认为命令(npm,artisan,ls等)正在使用terminal control codes,其中一个类正在使用非标准的ASCII字符。

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

是否有内置的方法告诉这些类不要这样做?如何才能恢复出色的输出?

1 个答案:

答案 0 :(得分: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
}

希望这有帮助。