2016-11-27 107 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意味着一個沒有大量挖掘主題的'電傳終端'。 –