2009-03-23 12 views
8

मैं पढ़ने के पल में खाली है या नहीं, यह देखने के लिए मैं खुले os.pipe() से पढ़ने की कोशिश कर रहा हूं। समस्या यह है कि read() पर कॉल करने से कार्यक्रम को तब तक अवरुद्ध कर दिया जाता है जब तक वहां वास्तव में कुछ पढ़ने के लिए नहीं होता है, लेकिन अगर कोई परीक्षण सफल हो रहा है तो कोई भी नहीं होगा।अवरुद्ध किए बिना os.pipe() से कैसे पढ़ा जाए?

मुझे पता है कि मैं टाइमआउट के साथ select.select() का उपयोग कर सकता हूं हालांकि मैं जानना चाहता था कि समस्या का कोई और समाधान है या नहीं।

उत्तर

14

आप इसे आजमा सकते हैं।

import os, fcntl 
fcntl.fcntl(thePipe, fcntl.F_SETFL, os.O_NONBLOCK) 

इस thePipe.read() के साथ गैर अवरुद्ध होना चाहिए।

pipe(7) आदमी पृष्ठ से

:

एक प्रक्रिया है, एक खाली पाइप से पढ़ा तो पढ़ा (2) को अवरुद्ध कर देगा जब तक डेटा उपलब्ध नहीं है का प्रयास करता है। (...) का उपयोग करके गैर-अवरुद्ध I/O संभव है 0cO_NONBLOCK खुली फ़ाइल स्थिति ध्वज को सक्षम करें ऑपरेशन पर सक्षम करें।

+1

आपको बहुत बहुत धन्यवाद। मुझे ठीक इसी की आवश्यकता थी। – mpeterson

+1

Yesssss! धन्यवाद! – juliomalegria

+0

सावधान रहें: '.readline()' जैसी फ़ाइल विधियां गैर-अवरुद्ध मोड की अपेक्षा नहीं कर सकती हैं। – jfs

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