मैं कुछ कोड के कुछ यूनिट परीक्षण लिख रहा हूं जो इनपुट में त्रुटियों की रिपोर्ट करने के लिए sys.stderr.write का उपयोग करता है। यह वही होना चाहिए, लेकिन यह इकाई परीक्षण आउटपुट clobbers। क्या पाइथन को एकल आदेशों के लिए त्रुटि संदेशों को आउटपुट करने का कोई तरीका नहीं है, à la 2> /dev/null
?इकाई परीक्षणों में stderr आउटपुट को छिपाएं
उत्तर
मैं एक संदर्भ प्रबंधक लेखन सलाह देते हैं:
import contextlib
import sys
@contextlib.contextmanager
def nostderr():
savestderr = sys.stderr
class Devnull(object):
def write(self, _): pass
def flush(self): pass
sys.stderr = Devnull()
try:
yield
finally:
sys.stderr = savestderr
अब, किसी भी कोड का टुकड़ा जिसका stderr आप एक with nostderr():
में दबा दिया चाहते हैं और आप स्थानीय है, अस्थायी, इसकी गारंटी-प्रतिवर्ती stderr दमन जो आप चाहते लपेट दें।
class DevNull(object):
def write(self, data): pass
sys.stderr = DevNull()
एक कम स्थायी समाधान करवाने के लिए, एक कुछ यह पता लगाने सकता है की तरह इस प्रकार है:
_stderr = None
def quiet():
global _stderr
if _stderr is None:
_stderr = sys.stderr
sys.stderr = DevNull()
def verbose():
global _stderr
if _stderr is not None:
sys.stderr = _stderr
_stderr = None
समारोह के नाम शायद बेहतर हो
मैं कम स्थायी समाधान की उम्मीद कर रहा था। क्या 'शांत (...)' जैसे कमांड को लपेटने का कोई तरीका नहीं है? – l0b0
बैकअप को स्टोर करने की कोई आवश्यकता नहीं है। पाइथन में पहले से ही एक sys है .__ stderr__ http://docs.python.org/library/sys.html#sys.__stderr__ –
बैकअप को स्टोर करने का कारण यह है कि कुछ भी पूर्ण नहीं है: कौन जानता है कि कुछ अन्य बड़ी कोड इकाई sys बदल गई है आपके द्वारा बुलाए जाने से पहले। इस तरह, आप बस अपनी पहली कार्रवाई को पूर्ववत कर रहे हैं। –
आप एक डमी फ़ाइल उद्देश्य यह है कि कुछ नहीं किया बना सकते हैं कर सकते हैं इसके आउटपुट के साथ, और उस पर stderr सेट करें:
class NullWriter:
def write(self, s):
pass
sys.stderr = NullWriter()
यदि आप केवल stde को शांत करना चाहते हैं rr एक विशिष्ट अवधि के लिए, यदि आप ऐसा तरह एक with
कथन का उपयोग कर सकते हैं:
class Quieter:
def __enter__(self):
self.old_stderr = sys.stderr
sys.stderr = NullWriter()
def __exit__(self, type, value, traceback):
sys.stderr = self.old_stderr
with Quieter():
# Do stuff; stderr will be suppressed, and it will be restored
# when this block exits
अजगर 2.6 या उच्चतर की आवश्यकता है, या आप अजगर 2.5 में उपयोग कर सकते हैं एक from __future__ import with_statement
साथ।
एक और संभावना (sys.stderr
को असाइन करने के अलावा) आपके कोड को प्रदान की गई फ़ाइल में त्रुटियों को लिखने के लिए तैयार करना है, लेकिन उस फ़ाइल को sys.stderr पर डिफ़ॉल्ट रूप से डिफॉल्ट करना है। फिर आप परीक्षण के दौरान एक देवनुल लेखक प्रदान कर सकते हैं। इस तरह, हर परीक्षण देव-शून्य के stderr
class DevNull(object):
def write(self, data):
pass
class MyTestCase(unittest.TestCase):
def setUp(self):
self.old_stderr = sys.stderr
sys.stderr = DevNull()
def tearDown(self):
sys.stderr = self.old_stderr
, लेकिन फिर अंत में यह पुनर्स्थापित करता है:
आप sys.stderr पुन: असाइन करना चाहते हैं, तो आप unittest ढांचे आप के लिए यह प्रबंधन करने के लिए उपयोग कर सकते हैं परीक्षण का।
यह भी लाभ है कि आप अपने परीक्षण में आउटपुट की जांच कर सकते हैं यदि आप चाहते थे। –
- 1. एफ # में इकाई परीक्षणों को कैसे संभालें?
- 2. पावरहेल में stderr आउटपुट को दबाने के लिए कैसे?
- 3. Django इकाई परीक्षणों को व्यवस्थित करना
- 4. इकाई परीक्षणों में वसंत एम्बेडेड एलडीएपी सर्वर
- 5. परीक्षणों में MsTest परिनियोजन Item आउटपुट डायरेक्टरी
- 6. गिट stderr आउटपुट पाइप नहीं कर सकता
- 7. @ graced इकाई परीक्षणों में एक्सपेक्टेड अपवाद
- 8. क्या मुझे STDERR या STDOUT को चेतावनियां आउटपुट करनी चाहिए?
- 9. आईफोन - तार्किक इकाई परीक्षणों के लिए संसाधनों को पुनर्प्राप्त करना
- 10. इकाई परीक्षणों के रखरखाव बोझ का प्रबंधन
- 11. .NET इकाई परीक्षणों की ऑटो-पीढ़ी
- 12. सॉफ़्ट कीबोर्ड को छिपाएं
- 13. लॉगिन गतिविधि को छिपाएं
- 14. TinyMCE बार को छिपाएं
- 15. stdout बारे में/stderr पुनर्निर्देशन
- 16. इकाई परीक्षणों को कैसे दस्तावेज किया जाना चाहिए?
- 17. समांतर इकाई परीक्षणों को लिखने के लिए सर्वोत्तम अभ्यास
- 18. प्लेटफ़ॉर्म-विशिष्ट इकाई परीक्षणों को वितरित और निष्पादित कैसे करें?
- 19. googletest इकाई परीक्षणों को आमंत्रित करने के लिए Makefile.am लिखना
- 20. सी खोल में stdout को stderr को रीडायरेक्ट करें
- 21. कोड लिखने से पहले इकाई परीक्षणों को लिखा जाना चाहिए?
- 22. stderr को stderout duplicating
- 23. सी #: बाहरी कंसोल प्रोग्राम को छिपाएं
- 24. इकाई परीक्षणों में समरूपता का मॉडल कैसे करें?
- 25. stdout के बजाय wget आउटपुट stderr क्यों करता है?
- 26. subprocess.Popen(), stderr और stdout का उपयोग करते समय कोई आउटपुट
- 27. स्थिर पुस्तकालय में संरचना परिभाषा को छिपाएं
- 28. UITableView में सेक्शन को कैसे छिपाएं?
- 29. ListView ColumnHeader को कैसे छिपाएं?
- 30. सभी खुले रूपों को छिपाएं
वाह! यह अद्भुत है। Coz से पहले contextlib के बारे में पता नहीं था मैं अभी भी पायथन 2.4 का उपयोग करें। –
@ शैलेश, हां, संदर्भलिब सबसे सरल संदर्भ प्रबंधकों के लेखन की सुविधा प्रदान करता है ('__enter__' और' __exit__' वाली कक्षा लिखना मुश्किल नहीं है, लेकिन इस तरह, पर्याप्त सरल मामलों के लिए, आपके पास कम बॉयलरप्लेट कोड भी है लिखो और पढ़ें ;-)। –
क्यों नहीं 'sys.stderr = os.devnull' – Matt3o12