2012-04-13 12 views
11

से रंगीन कमांड निष्पादित करें मेरे पास एक कमांड है, उदाहरण के लिए 'git diff' जो रंगीन परिणाम आउटपुट करता है जब मैं इसे टर्मिनल से चलाता हूं।एक php स्क्रिप्ट

अब, मैं उस कमांड को एक सीएलआई PHP स्क्रिप्ट से कॉल करना चाहता हूं और रंगीन परिणाम कंसोल में प्रदर्शित करना चाहता हूं। मैंने exec(), system(), passthru() के साथ प्रयास किया है, लेकिन सभी मामलों में आउटपुट को सादे काले और सफेद पाठ में परिवर्तित कर दिया गया है।

क्या मानक परिणाम के रंग को संरक्षित करने का कोई तरीका है? यदि नहीं, तो क्या कोई जानता है कि यह जानकारी क्यों खो जाती है?

+0

बस एक विचार: यह शायद पर्यावरण-परिवर्तनीय संबंधित है। एक त्वरित परीक्षण सुराग प्रदान कर सकता है: 'env> env_a.out && php -r 'system (" 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); '') गिट जैसे कमांड का आह्वान करने के बजाय। – gamen

उत्तर

6

सभी संभावना आदेश आप चला रहे हैं उत्पादन एक टर्मिनल के लिए है देखने के लिए जाँच और यह colorizing अगर यह नहीं है नहीं किया जाता है। आमतौर पर इसे मजबूर करने का एक तरीका होता है, लेकिन यह कमांड के लिए विशिष्ट होगा; git diff के मामले में, आप --color=always निर्दिष्ट कर सकते हैं।

+1

हां, आप सही हैं, अगर मैंने ऐसा कुछ किया: ' ' मुझे रंग मिला। तो सवाल अब है: क्या php से कोई तरीका है, आदेशों को बताने के लिए कि हाँ, हम टर्मिनल में हैं? – jeanmonod

+3

दुर्भाग्यवश, कमांड वास्तव में * टर्मिनल से जुड़ा हुआ नहीं है जिस तरह से PHP इसे निष्पादित करता है (शैल के तरीके के विपरीत)। यहां तक ​​कि जब आप 'passthru' का उपयोग करते हैं, तो PHP स्वयं को कमांड और टर्मिनल के बीच में रखता है; यह आउटपुट को तब तक संशोधित नहीं करता है जब यह गुजरता है। यह सिर्फ रंग नहीं है; पूर्ण-स्क्रीन कमांड इस तरह से चलने पर बिल्कुल काम नहीं करेंगे। कुछ विस्तृत छद्म-टर्मिनल सेटअप से बहुत कम, जो मुझे नहीं लगता कि आप PHP से भी कर सकते हैं, मुझे नहीं लगता कि एक सामान्य समाधान है। –

+0

ठीक है, वैसे भी धन्यवाद – 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

यह सवाल का जवाब नहीं लगता है। ओपी 'shell_exec() ',' exec() ', आदि से रंगीन आउटपुट प्राप्त करने का एक तरीका मांग रहा था, यह नहीं पूछ रहा कि PHP स्क्रिप्ट से टर्मिनल में रंगीन आउटपुट को आउटपुट कैसे किया जाए। –

संबंधित मुद्दे