दिलचस्प पोस्ट
एंड्रॉइड – विस्तार योग्यलिस्टव्यू पायथन: एन सूचियों की सूची बनाने का सबसे तेज़ तरीका <> सूची में पिछले मूल्यों को ओवरराइट करने के लिए <> सूची में एक नया मान क्यों जोड़ता है <> आईओएस एप डीबगर में चल रहा है या नहीं, इसका पता लगाने कैसे jQuery के साथ फ़ाइल इनपुट आकार की जांच करने के लिए? SQL सर्वर में प्रमुख शून्य के साथ पैडिंग द्वारा फ़ॉर्मेटिंग नंबर पायथन रिगेक्स में दोहराए जाने वाले उपपाठियों को कैप्चर करना कैसे पूर्णांक। ParseInt (स्ट्रिंग) वास्तव में काम करता है? ऑफ़लाइन उपयोग के लिए Google मानचित्र टाइल कैश कैसे करें? एक फ़ोल्डर से SQL सर्वर पर एकाधिक सीएसवी फ़ाइलें आयात करें जावा में JSON का उपयोग करते हुए HTTP POST एपीपी नेट पहचान पहचान एक ब्लैक-बॉक्स क्यों है? बूटस्ट्रैप के साथ प्राइमफैसेस का उपयोग पैडिंग / साइजिंग / सीमाओं में परिवर्तन के कारण होता है आप एक जावास्क्रिप्ट दिनांक यूटीसी में कैसे बदल सकते हैं? मैं एक एंकर टैग के लिए एक क्लिक कैसे अनुकरण कर सकता हूं?

पायथन फ़ंक्शन कॉल से stdout आउटपुट कैसे कैप्चर करें?

मैं एक पायथन लाइब्रेरी का उपयोग कर रहा हूं जो किसी वस्तु के लिए कुछ करता है

do_something(my_object) 

और इसे बदलता है ऐसा करते समय, यह स्टडआउट के लिए कुछ आंकड़ों को प्रिंट करता है, और मैं इस जानकारी पर पकड़ हासिल करना चाहता हूं। उचित समाधान के लिए प्रासंगिक जानकारी वापस करने के लिए do_something() बदलना होगा,

 out = do_something(my_object) 

लेकिन यह कुछ समय पहले हो सकता है जब do_something() के devs इस समस्या को प्राप्त करें। एक वैकल्पिक हल के रूप में, मैंने सोचा था कि जो कुछ भी करता है do_something() stdout को लिखता है

मैं कैसे कोड में दो बिंदुओं के बीच stdout आउटपुट कैप्चर कर सकता हूं, जैसे,

 start_capturing() do_something(my_object) out = end_capturing() 

?

Solutions Collecting From Web of "पायथन फ़ंक्शन कॉल से stdout आउटपुट कैसे कैप्चर करें?"

इस संदर्भ प्रबंधक को आज़माएं:

 from cStringIO import StringIO import sys class Capturing(list): def __enter__(self): self._stdout = sys.stdout sys.stdout = self._stringio = StringIO() return self def __exit__(self, *args): self.extend(self._stringio.getvalue().splitlines()) del self._stringio # free up some memory sys.stdout = self._stdout 

उपयोग:

 with Capturing() as output: do_something(my_object) 

output अब फ़ंक्शन कॉल द्वारा मुद्रित लाइनों वाली एक सूची है।

उन्नत उपयोग:

क्या स्पष्ट नहीं हो सकता है कि यह एक से अधिक बार किया जा सकता है और परिणाम एकसमान हो गए हैं:

 with Capturing() as output: print 'hello world' print 'displays on screen' with Capturing(output) as output: # note the constructor argument print 'hello world2' print 'done' print 'output:', output 

आउटपुट:

 displays on screen done output: ['hello world', 'hello world2'] 

अजगर में> = 3.4, संदर्भ-सूची में एक redirect_stdout डेकोरेटर होता है। इसका उपयोग आपके प्रश्न का उत्तर देने के लिए किया जा सकता है:

 import io from contextlib import redirect_stdout f = io.StringIO() with redirect_stdout(f): do_something(my_object) out = f.getvalue() 

डॉक्स से :

प्रसंग प्रबंधक को अस्थायी रूप से sys.stdout को किसी अन्य फ़ाइल या फ़ाइल की तरह ऑब्जेक्ट पर रीडायरेक्ट करने के लिए।

यह उपकरण मौजूदा कार्यों या वर्गों के लिए लचीलापन जोड़ता है जिनके आउटपुट को stdout के लिए कठिन बना दिया गया है।

उदाहरण के लिए, सहायता () सामान्य रूप से sys.stdout को भेजा जाता है। आप आउटपुट को एक io.StringIO ऑब्जेक्ट पर रीडायरेक्ट करके एक स्ट्रिंग में उस आउटपुट को कैप्चर कर सकते हैं:

  f = io.StringIO() with redirect_stdout(f): help(pow) s = f.getvalue() 

डिस्क पर फ़ाइल में मदद () के आउटपुट को भेजने के लिए, आउटपुट को एक नियमित फ़ाइल पर रीडायरेक्ट करें:

  with open('help.txt', 'w') as f: with redirect_stdout(f): help(pow) 

Sys.stderr के लिए मदद () का उत्पादन भेजने के लिए:

 with redirect_stdout(sys.stderr): help(pow) 

ध्यान दें कि sys.stdout पर वैश्विक साइड इफेक्ट का मतलब है कि यह संदर्भ मैनेजर लाइब्रेरी कोड में उपयोग के लिए उपयुक्त नहीं है और सबसे अधिक थ्रेडेड अनुप्रयोग है। इसका उप-प्रोसेसैस के उत्पादन पर कोई प्रभाव नहीं पड़ता है हालांकि, कई उपयोगिता स्क्रिप्ट के लिए यह अभी भी एक उपयोगी तरीका है।

यह संदर्भ प्रबंधक रीएन्ट्रेंट है

पायथन में फाइल पढ़ने और लिखने के बारे में इस लिंक पर एक नज़र डालें । यह आपको विभिन्न तरीकों से फाइल करने के लिए चीजें लिखने के लिए एक महसूस करनी चाहिए।