Symfony 进程吞噬终端控制代码

Symfony Process Eats Terminal Control Codes

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

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

是否有内置方法告诉这些 classes 不要那样做?我怎样才能恢复漂亮的输出?

您调用的程序的颜色可用性 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
}

希望对您有所帮助。