2010-11-29 13 views
9

Getting output of system() calls in Ruby के समान, मैं एक सिस्टम कमांड चला रहा हूं, लेकिन इस मामले में मुझे आदेश से STDOUT को आउटपुट करने की आवश्यकता है।मैं इसे चलाने के दौरान एक रूबी सिस्टम() कॉल के STDOUT कैसे प्राप्त करूं?

+0

यह उत्सुक है कि आप कुछ भी विशेष करने की होना चाहिए है। मेरे अनुभव में, जब मैं 'सिस्टम' का उपयोग कर प्रोग्राम चलाता हूं, तो बाल कार्यक्रम का स्टडआउट पेरेंट प्रोग्राम के स्टडआउट पर जाता है, जो आपको लगता है कि ऐसा लगता है। –

+0

यह भी काम कर सकता है: http://stackoverflow.com/questions/2215455/printing-to-screen-in-a-rake-task/2215986#2215986 –

उत्तर

13

लिंक किए गए प्रश्न के रूप में, उत्तर system का उपयोग नहीं करने के लिए system पर इसका समर्थन नहीं करता है।

हालांकि इस बार समाधान backticks का उपयोग नहीं करना है, लेकिन IO.popen, जो एक आईओ ऑब्जेक्ट देता है जिसका उपयोग आप इनपुट को पढ़ने के लिए उपयोग कर सकते हैं।

+7

धन्यवाद, मैं 'IO.popen ('command_to_run' का उपयोग करके समाप्त हुआ ') {| io | जबकि (लाइन = io.gets) लाइन अंत डालता है} ' –

0

यहां मेरे समाधान

def io2stream(shell, &block) 
    Open3.popen3(shell) do |_, stdout, stderr| 
    while line = stdout.gets 
     block.call(line) 
    end 

    while line = stderr.gets 
     block.call(line) 
    end 
    end 
end 

io2stream("ls -la", &lambda { |str| puts str }) 
संबंधित मुद्दे

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