पायथन में प्रासंगिक स्ट्रीम पुनर्निर्देशन
मानक आउटपुट और त्रुटि स्ट्रीम (stdout और stderr) का पुनर्निर्देशन कई परिदृश्यों में उपयोगी साबित होता है। हालाँकि, जब कोई फ़ंक्शन इन धाराओं का आंतरिक संदर्भ रखता है तो पारंपरिक तरीके अक्सर कम पड़ जाते हैं।
एक गतिशील समाधान की आवश्यकता
पारंपरिक पुनर्निर्देशन तकनीक, जैसे sys.stdout, स्ट्रीम को स्थायी रूप से पुनर्निर्देशित करें। यह समस्या तब उत्पन्न होती है जब कोई विधि स्वाभाविक रूप से इन चरों में से किसी एक को आंतरिक रूप से कॉपी करती है। नतीजतन, ये विधियां स्ट्रीम को ठीक से पुनर्निर्देशित करने में विफल रहती हैं।
समाधान: संदर्भ प्रबंधक एक्सटेंशन
इस समस्या को प्रभावी ढंग से संबोधित करने के लिए, एक संदर्भ प्रबंधक दृष्टिकोण को नियोजित किया जा सकता है। इस पद्धति में संदर्भ प्रबंधक के भीतर पुनर्निर्देशन तर्क को लपेटना शामिल है:
import os
import sys
class RedirectStdStreams(object):
def __init__(self, stdout=None, stderr=None):
self._stdout = stdout or sys.stdout
self._stderr = stderr or sys.stderr
def __enter__(self):
self.old_stdout, self.old_stderr = sys.stdout, sys.stderr
self.old_stdout.flush(); self.old_stderr.flush()
sys.stdout, sys.stderr = self._stdout, self._stderr
def __exit__(self, exc_type, exc_value, traceback):
self._stdout.flush(); self._stderr.flush()
sys.stdout = self.old_stdout
sys.stderr = self.old_stderr
इस संदर्भ प्रबंधक का उपयोग करके, आप संदर्भ ब्लॉक के भीतर स्ट्रीम को निर्बाध रूप से पुनर्निर्देशित कर सकते हैं:
devnull = open(os.devnull, 'w')
print('Fubar')
with RedirectStdStreams(stdout=devnull, stderr=devnull):
print("You'll never see me")
print("I'm back!")
निष्कर्ष
प्रदान किया गया समाधान अस्थायी रूप से stdout और stderr को पुनर्निर्देशित करने के लिए संदर्भ प्रबंधक पैटर्न का लाभ उठाता है, पिछले दृष्टिकोण की सीमाओं को दरकिनार करता है . यह तकनीक उन कार्यों से निपटने में विशेष रूप से उपयोगी साबित होती है जिनमें इन धाराओं के स्थानीय संदर्भ होते हैं।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3