2011-03-26 12 views
6

लिनक्स में मैं PHP से एक gnome zenity प्रगति बार विंडो चलाने के लिए चाहता हूँ। यह ज़ेनिटी कैसे काम करता है:PHP से stdin के लिए लेखन?

linux-shell$ zenity --display 0:1 --progress --text='Backing up' --percentage=0 
10 
50 
100 

तो पहला आदेश ज़ेनिटी प्रोग्रेस बार को 0 प्रतिशत पर खुलता है। जेनेटी तब प्रगति बार प्रतिशत के रूप में मानक इनपुट नंबर लेता है (इसलिए जब आप उन नंबरों को टाइप करते हैं तो यह 10% से 50% से 100% तक जाएगा)।

मैं समझ नहीं कैसे हालांकि उन संख्याओं में टाइप करने पीएचपी प्राप्त करने के लिए, मैं कोशिश की है:

exec($cmd); 
echo 10; 
echo 50; 

और:

$handle = popen($cmd, 'w'); 
fwrite($handle, 10); 

और:

$descriptorspec = array(
    0 => array("pipe", "r"), // stdin is a pipe that the child will read from 
    1 => array("pipe", "w") // stdout is a pipe that the child will write to 
); 

$h = proc_open($cmd, $descriptorspec, $pipes); 

fwrite($pipes[1], 10); 

लेकिन उनमें से कोई भी प्रगति पट्टी अद्यतन नहीं करता है। ज़ेनिटी को अपनी प्रगति पट्टी को अपडेट करने के लिए लिनक्स शैल पर stdin के प्रभाव की नकल कैसे कर सकता हूं?

उत्तर

6

आपका पहला वर्तमान स्क्रिप्ट के stdin की एक प्रति के साथ आदेश निष्पादित करता है, न कि आपके द्वारा प्रदान किया गया पाठ।

आपका दूसरा विफल रहता है क्योंकि आप नई लाइन भूल रहे हैं। इसके बजाय fwrite($handle, "10\n") आज़माएं। ध्यान दें कि ईओएफ पहुंचने पर ज़ेनिटी 100% तक पहुंचने लगती है (उदाहरण के लिए आपकी PHP स्क्रिप्ट के अंत में $handle के निचले करीब)।

आपका तीसरा विफल रहता है क्योंकि आप नई लाइन भूल रहे हैं और आप गलत पाइप पर लिख रहे हैं। इसके बजाय fwrite($pipes[0], "10\n") आज़माएं, और उपरोक्त के रूप में ईओएफ के बारे में एक ही नोट याद रखें।

+0

बहुत बहुत धन्यवाद! विश्वास नहीं कर सकता मैं नई लाइन भूल गया! :) – hamstar

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