"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > पायथन फ़ंक्शंस में मानक आउटपुट और त्रुटि स्ट्रीम को गतिशील रूप से रीडायरेक्ट कैसे करें?

पायथन फ़ंक्शंस में मानक आउटपुट और त्रुटि स्ट्रीम को गतिशील रूप से रीडायरेक्ट कैसे करें?

2024-11-08 को प्रकाशित
ब्राउज़ करें:741

How to Dynamically Redirect Standard Output and Error Streams in Python Functions?

पायथन में प्रासंगिक स्ट्रीम पुनर्निर्देशन

मानक आउटपुट और त्रुटि स्ट्रीम (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