मैं रूबी में एक विधि की तलाश में हूं जो मूल रूप से यह है:क्या यह जांचने के लिए एक आसान तरीका है कि रूबी आईओ इंस्टेंस पढ़ा जाएगा()?
io.ready_for_read?
मैं सिर्फ यह जांचना चाहता हूं कि दिया गया IO
ऑब्जेक्ट (मेरे मामले में, popen
कॉल का परिणाम) आउटपुट उपलब्ध है, यानी फॉलो अप कॉल io.read(1)
ब्लॉक नहीं होगा।
ये दो विकल्प हैं जिन्हें मैं देखता हूं, जिनमें से कोई भी मुझे पसंद नहीं है:
io.read_nonblock
- यूनिक्सread()
का बहुत पतला एक अंशांकन - मैंerrno
त्रुटि हैंडलिंग से निपटना नहीं चाहता हूं।io.select
टाइमआउट 0 के साथ - इस सरल ऑपरेशन के उद्देश्य को obfuscates।
क्या कोई बेहतर विकल्प है जिसे मैंने अनदेखा किया है?
मुझे नहीं लगता/लगता है। यह वास्तव में क्या है के लिए चयन है। हां, चुनें भयानक वाक्यविन्यास है, लेकिन मुझे लगता है कि सिद्धांत में आप एक "ready_for_read" बंद कर सकते हैं? आईओ में विधि टाइप करें जो चयन का उपयोग करता है। –
कि 'आईओ # ready_for_read?' कार्यान्वयन मेरे लिए काम नहीं करता है - यह हमेशा सच होता है। मुझे लगता है कि समस्या यह है कि जब तक कोई वास्तविक डेटा पढ़ने के लिए न हो, तब तक दूसरी प्रक्रिया द्वारा लिखने के लिए स्ट्रीम खोला जाने तक 'IO # select' ब्लॉक) (जो मेरे मामले में यह हमेशा पहले से ही है)।मैं इसे हासिल करने के लिए एक और तरीका ट्रैक करने की कोशिश कर रहा हूं लेकिन मुझे बहुत भाग्य नहीं है। –