2016-11-27 18 views
2

私はSymfony Processをいくつかのコマンドで実行していますが、私はそれらをSymfonyのOutputInterfaceに書き込むときに、色やプログレスバーを表示していないことに気付きました。コマンド(npm、artisan、lsなど)はterminal control codesを使用していて、そのうちの1つは非標準の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'の含意が何であるか注意する必要があります。私のような人はTTYが被験者を掘り下げることなく「テレタイプ端末」を意味することに気付かないかもしれません。 –