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
}
希望对您有所帮助。
所以我是 运行 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
}
希望对您有所帮助。