2012-04-13 12 views
11

私はターミナルから実行したときにカラー化された結果を出力するコマンド 'git diff'を持っています。phpスクリプトからカラー化されたコマンドを実行

ここでは、このコマンドをCLIのphpスクリプトから呼び出して、コンソールに色付きの結果を表示したいとします。私はexec()、system()、passthru()を試してみましたが、すべての場合、出力は普通の白黒テキストに変換されています。

標準的な結果の色を保存する方法はありますか?そうでない場合、誰かがこの情報が失われる理由を知っていますか?

+0

ちょっとしたアイデア:おそらく環境変数に関連していると思います。クイックテストでは、 'env> env_a.out && php -r 'システム(" env "); > env_b.out && diff env_a.out env_b.out' – gamen

+0

両方のenvファイルが並べ替えられた後、あなたのテストを試してみましょう。diffは次のようなものです: 'SHLVL = 1対SHLVL = 2' – jeanmonod

+1

それと似ていますか?正直言って驚いています。おそらくあなたの環境に関する詳細を提供することはあなたの質問に役立つでしょうし、あなた自身が最初に色を出力しようとすることで問題を単純化することもできます( 'php -r 'printf("%c [32mGreen%c [0m \ n "、27 、27); '')gitのようなコマンドを呼び出すのではなく、 – gamen

答えて

6

すべての可能性では、あなたが実行しているコマンドは、出力が端末にあるかどうかをチェックし、そうでない場合は、それをカラー化されていません。通常は強制する方法がありますが、それはコマンド自体に固有のものになります。 git diffの場合は、--color=alwaysと指定できます。

+1

はい、そういうことをすればあなたのことは正しいです: '<?php system( 'git diff --color = always'); ?> ' 私は色を得ました。 それで問題は今です:phpからコマンドを伝える方法はありますか?はい、私たちはターミナルにいますか? – jeanmonod

+3

残念なことに、コマンドは実際には*(シェルのやり方とは異なり)PHPが実行するように端末に接続されていません。 'passthru'を使っても、PHPはコマンドと端末の間に入ります。それが通過するときに出力を変更することはありません。ただの色ではありません。このように実行すると、フルスクリーンコマンドは全く機能しません。だから、とにかくPHPからやっているとは思えない、擬似端末の設定が不十分なので、一般的な解決策はないと思う。 –

+0

OK、ありがとう – jeanmonod

-1

チェックこのクラス:https://gist.github.com/2390007

public static function color($text, $foreground, $background = null) 
    { 
     if (static::is_windows()) 
     { 
      return $text; 
     } 

     if (! array_key_exists($foreground, static::$foreground_colors)) 
     { 
      throw new \FuelException('Invalid CLI foreground color: '.$foreground); 
     } 

     if ($background !== null and ! array_key_exists($background, static::$background_colors)) 
     { 
      throw new \FuelException('Invalid CLI background color: '.$background); 
     } 

     $string = "\033[".static::$foreground_colors[$foreground]."m"; 

     if ($background !== null) 
     { 
      $string .= "\033[".static::$background_colors[$background]."m"; 
     } 

     $string .= $text."\033[0m"; 

     return $string; 
    } 
+0

これは質問に答えていないようです。 OPは、 'shell_exec()'、 'exec()'などから色分けされた出力を得る方法を求めていました。カラー出力をPHPスクリプトから端末に出力する方法を尋ねませんでした。 –

関連する問題