2009-10-30 9 views
8

परिदृश्य:कैप्चर STDOUT और एक बाहरी कार्यक्रम के STDERR * जबकि * यह क्रियान्वित है (रूबी)

इस कार्यक्रम उपयोगी (लेकिन गुप्त) का एक बहुत भेजता है मैं अपने रूबी स्क्रिप्ट से एक बाहरी प्रोग्राम कॉल करने के लिए है, और जानकारी stdout और stderr करने के लिए।

कार्यक्रम चल रहा हो, मैं और लाइनों यह stdout और stderr के लिए भेजता है पार्स करने के लिए करना चाहते हैं:

  • /निकाल नहीं तो आवश्यक
  • Reformat यदि आवश्यक हो तो
  • उन्हें बदलना

मैं सभी सामान्य चाल (सिस्टम, कार्यकारी, popen, popen3, बैकटिक, आदि आदि) की कोशिश की है, लेकिन मैं केवल प्राप्त कर सकते हैं stdout/stderr के बाद कार्यक्रम क्रियान्वित किया जाता है, नहींके दौरानइसके निष्पादन।

कोई विचार?

STDOUT.sync = true # That's all it takes... 
IO.popen(command+" 2>&1") do |pipe| # Redirection is performed using operators 
    pipe.sync = true 
    while str = pipe.gets 
    puts "-> "+str # This is synchronous! 
    end 
end 

... और हाँ, इस पर काम करता है:

ओह, और मैं :-(

+0

क्या आप अपनी 'चाल' (कहें, पॉपन) में से एक का उदाहरण दे सकते हैं? –

+0

मुझे लगता है कि विंडोज़ में पाइप नहीं हैं? –

+0

@jug: विंडोज़ में पूरी तरह से मान्य पाइप हैं। –

उत्तर

14

वास्तव में विंडोज पर हूँ, यह आसान से मैंने सोचा था, यह पूरी तरह से काम करने लगता है विंडोज़!

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