कुछ बहुत ही अजीब हो रहा है।मैं कैसे ठीक से अजगर में FIFOs के लिए लिख सकता हूँ? जब मैं लिखने के लिए पायथन में FIFOs (नामित पाइप) खोलने
>>> fifo_write = open('fifo', 'w')
ऊपर लाइन ब्लॉक जब तक मैं एक और दुभाषिया खोलने के लिए और निम्न लिखें::
>>> fifo_read = open('fifo', 'r')
>>> fifo.read()
मुझे समझ नहीं आता जब मैं एक इंटरैक्टिव दुभाषिया में लिखने के लिए एक फीफो को खोलने का प्रयास करने पर विचार करें कि क्या होता है मुझे पढ़ने के लिए पाइप खोलने के लिए क्यों इंतजार करना पड़ा, लेकिन इसे छोड़ने दें। उपर्युक्त कोड तब तक अवरुद्ध होगा जब तक अपेक्षित डेटा उपलब्ध न हो। हालांकि चलो कहते हैं कि मैं पहली बार दुभाषिया खिड़की और प्रकार पर वापस चलते हैं:
>>> fifo_write.write("some testing data\n")
>>> fifo_write.flush()
अपेक्षित व्यवहार है कि दूसरे के व्याख्याता का read
करने के लिए कॉल वापस आ जाएगी और हम, स्क्रीन पर डेटा देखेंगे सिवाय इसके कि नहीं है मेरे साथ हो रहा है अगर मैं os.fsync
फोन निम्न होता है:
>>> import os
>>> fifo_write.flush()
>>> os.fsync(fifo_write.fileno())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OSError: [Errno 22] Invalid argument
और फीफो पाठक अभी भी इंतज़ार कर रहा है। हालांकि, अगर मैं fifo_writer.close()
पर कॉल करता हूं तो डेटा फ़्लश हो जाता है। अगर मैं एक खोल आदेश का उपयोग पाइप को खिलाने के लिए:
$ echo "some data" > fifo
तो पाठक उत्पादन होता है:
>>> fifo_read.read()
'some data\n'
किसी को भी यह अनुभव किया है? यदि ऐसा है तो इसके लिए कोई कामकाज है? मेरा वर्तमान ओएस लिनक्स 2.6.38 के साथ उबंटू 11.04 है।
आप फीफो कैसे बनाया? – OneOfOne
या तो "os.mkfifo ('fifo')" या शैल में "mkfifo fifo" –
'fsync() 'का उपयोग किसी फीफो पर नहीं करता है; डिस्क पर कोई भी डेटा संग्रहित नहीं होता है (बहुत * अजीब परिस्थितियों में स्वैप में * शायद * को छोड़कर)। –