दिलचस्प पोस्ट
नोडवेल बनाम आंतरिक एचटीएमएल और टेक्स्ट कंटेंट कैसे चुनाव करें? बहु परत perceptron (एमएलपी) वास्तुकला: छिपी परतों की संख्या और छिपी परत के आकार को चुनने के लिए मानदंड? Sass में चर तर्क सूचियों के साथ एक संपत्ति के लिए एकाधिक मान सी # में नियमित अभिव्यक्ति समूह जावा / एंड्रॉइड – कैसे एक पूर्ण स्टैक ट्रेस मुद्रित करें? आपको एक स्टैटिक क्लास के बजाय सिंगलटन पैटर्न का उपयोग कब करना चाहिए? जावास्क्रिप्ट: अपरिभाषित! == अपरिभाषित? त्रि.सं. पायथन: स्ट्रिंग नाम से फ़ंक्शन कॉल करें सीआर एलएफ, एलएफ़ और सीआर लाइन ब्रेक प्रकार के बीच का अंतर? मैं मार्जिन को कैसे उखाड़ दूं? लक्ष्य के रूप में आईपी-एड्रेस के साथ पॉर्शहेल रिमोटिंग Jquery इनपुट सरणी क्षेत्र प्राप्त करें जावास्क्रिप्ट चर कैसे PHP पास करने के लिए? जब मैं पहली बार एक दृश्य को माप सकता हूँ?

पायथन में एक अस्थायी फीफा (नामित पाइप) बनाएँ?

आप अजगर में एक अस्थायी फीफा (नामित पाइप) कैसे बना सकते हैं? यह काम करना चाहिए:

import tempfile temp_file_name = mktemp() os.mkfifo(temp_file_name) open(temp_file_name, os.O_WRONLY) # ... some process, somewhere, will read it ... 

हालांकि, मैं पायथन डॉक्स 11.6 और संभावित हटाने के कारण बड़ी चेतावनी के कारण संकोच कर रहा हूं क्योंकि यह नापसंद है

संपादित करें : यह उल्लेखनीय है कि मैंने os.mkfifo (और एक्सटेंशन os.mkfifo द्वारा) की कोशिश की है, लेकिन os.mkfifo फेंकता है:

OSError -17: फ़ाइल पहले से मौजूद है

जब आप इसे फाइलों पर चलाते हैं जो कि mkstemp / NamedTemporaryFile बनाया है

Solutions Collecting From Web of "पायथन में एक अस्थायी फीफा (नामित पाइप) बनाएँ?"

os.mkfifo() अपवाद के साथ असफल हो जायेगा OSError: [Errno 17] File exists अगर फाइल पहले से मौजूद है, तो यहां कोई सुरक्षा समस्या नहीं है tempfile.mktemp() का उपयोग करने के साथ सुरक्षा समस्या दौड़ की स्थिति है, जहां यह संभव है कि हमलावर एक फ़ाइल को स्वयं को खोलने से पहले एक ही नाम के साथ बनाने के लिए संभव है, लेकिन जब फ़ाइल पहले से ही मौजूद है, तो os.mkfifo() विफल हो जाता है एक समस्या नहीं है।

हालांकि, चूंकि mktemp() को नापसंद किया गया है, आपको उसका उपयोग नहीं करना चाहिए। आप इसके बजाय tempfile.mkdtemp() उपयोग कर सकते हैं:

 import os, tempfile tmpdir = tempfile.mkdtemp() filename = os.path.join(tmpdir, 'myfifo') print filename try: os.mkfifo(filename) except OSError, e: print "Failed to create FIFO: %s" % e else: fifo = open(filename, 'w') # write stuff to fifo print >> fifo, "hello" fifo.close() os.remove(filename) os.rmdir(tmpdir) 

संपादित करें: मुझे यह स्पष्ट करना चाहिए कि, सिर्फ इसलिए कि mktemp() भेद्यता इस द्वारा टल गई है, वहां अभी भी अन्य सामान्य सुरक्षा समस्याएं हैं जिन्हें विचार करने की आवश्यकता है; जैसे कि एक हमलावर फीफा (यदि उनके पास उपयुक्त अनुमतियाँ थी) बना सकता है, तो इससे पहले कि आपके प्रोग्राम में त्रुटियों / अपवाद ठीक ढंग से नहीं संभाले हैं, आपके प्रोग्राम को दुर्घटना हो सकती है।

कैसे उपयोग करने के बारे में

 d = mkdtemp() t = os.path.join(d, 'fifo') 

यदि यह आपके प्रोग्राम के भीतर उपयोग के लिए है, और किसी भी बाहरी रूप से नहीं है, तो क्यूई मॉड्यूल पर नज़र डालें। एक अतिरिक्त लाभ के रूप में, अजगर कतार धागा सुरक्षित हैं

प्रभावी रूप से, जो सभी mkstemp लूप में mktemp चलाया mktemp है और जब तक यह सफल नहीं होता तब तक विशेष रूप से बनाने का प्रयास करता है (यहां stdlib स्रोत कोड देखें)। आप os.mkfifo साथ ऐसा कर सकते हैं:

 import os, errno, tempfile def mkftemp(*args, **kwargs): for attempt in xrange(1024): tpath = tempfile.mktemp(*args, **kwargs) try: os.mkfifo(tpath, 0600) except OSError as e: if e.errno == errno.EEXIST: # lets try again continue else: raise else: # NOTE: we only return the path because opening with # os.open here would block indefinitely since there # isn't anyone on the other end of the fifo. return tpath else: raise IOError(errno.EEXIST, "No usable temporary file name found") 

क्यों नहीं बस mkstemp () का उपयोग करें?

उदाहरण के लिए:

 import tempfile import os handle, filename = tempfile.mkstemp() os.mkfifo(filename) writer = open(filename, os.O_WRONLY) reader = open(filename, os.O_RDONLY) os.close(handle)