मैं एक ऐसी स्क्रिप्ट पर काम कर रहा हूं जो IO.popen का उपयोग किसी अन्य प्रोग्राम को खोलने और लगातार डेटा को पढ़ने के लिए करता है। यह इस तरह है:रूबी IO.popen STDOUT बफरिंग
process = IO.popen(["/the/program", "argument", "argument"])
loop do
line = process.gets
puts "#{line}"
end
(वास्तविक कार्यक्रम सिर्फ उत्पादन मुद्रण, जाहिर है की तुलना में अधिक है - कि सिर्फ एक उदाहरण है।)
मुद्दा मैं में चल रहा हूँ कि popen STDOUT बफरिंग किया जा रहा है है खुली प्रक्रिया से। मैंने प्रोग्राम को सीधे एक खोल से और पॉपन के माध्यम से, साइड-बाय-साइड के माध्यम से चलाकर पुष्टि की है, और रूबी को एक समय में कभी भी एक पंक्ति नहीं मिलती है। यह हमेशा एक समय में कई लाइनें प्राप्त करता है, और देरी हो रही है।
मैं
STDOUT.sync = true
की कोशिश की है ... popen से पहले, लेकिन वह कुछ भी नहीं बदला है।
प्रश्न में प्रोग्राम निश्चित रूप से \ n एक नई लाइन के रूप में उपयोग कर रहा है, इसलिए यह मुद्दा नहीं है।
क्या आपने 'process.sync = true' को आजमाया था? – DNNX
@Eddie क्या आपने इसे समझ लिया? –