test eder. Olması gerektiği gibi bu, ancak bu birim test çıktısını clobbers. Python'a, tekli komutlar için hata mesajı vermemesi için bir yol var mı, la 2> /dev/null
? aşağıdaki gibi benzerigizle stderr çıktı ben girişteki hataları bildirmek için sys.stderr.write kullanan bazı birkaç kod birim testleri yazıyorum
cevap
ben bir bağlam yöneticisi yazma öneririz: Şimdi
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
, kimin Stderr bir
with nostderr():
içinde bastırılmış istediğiniz ve istediğiniz geçici, garantili-geri dönüşlü şekilde hataları bastırma lokalize herhangi kod parçacığını sarın.
class DevNull(object):
def write(self, data): pass
sys.stderr = DevNull()
daha az kalıcı bir çözüm olması için, bir şey anlamaya olabilir:
_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
Fonksiyon isimleri muhtemelen
Daha az kalıcı bir çözüm olmasını umuyordum. Sessiz (...) gibi bir komutu sarmanın bir yolu yok mu? – l0b0
Yedeği saklamanıza gerek yok. Bazı diğer büyük kod varlık sys değişirse kim bilir: Python zaten hiçbir şeyin mutlak böyledir yedeği depolamak için bir sys .__ stderr__ http://docs.python.org/library/sys.html#sys.__stderr__ –
nedeni var .stderr çağırılmadan önce mi? Bu şekilde, sadece ilk eyleminizi geri alıyorsunuz. –
Sen hiçbir şey yapmadı bir kukla dosya nesnesi oluşturabilir iyi olabilir onun çıkışı ile ve set stderr buna:
class NullWriter:
def write(self, s):
pass
sys.stderr = NullWriter()
sadece STDE sessiz istiyorsanız rr belirli bir süre için, bunu böyle bir with
deyimi kullanabilirsiniz:
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
Python 2.6 veya üstü gerektirir, yoksa bir from __future__ import with_statement
ile Python 2.5 bunu kullanabilir.
Başka bir olasılık da (sys.stderr
'a atanmanın yanı sıra) kodunuzu sağlanan bir dosyaya hatalar yapacak şekilde yapılandırmaktır, ancak bu dosyayı varsayılan olarak sys.stderr olarak yapmaktır. Daha sonra test sırasında bir DevNull yazarı sağlayabilirsiniz.
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
Bu şekilde, her bir test dev null en stderr'yi, ama sonra sonunda onu geri yükler: Eğer sys.stderr yeniden atamak istediğiniz takdirde
, sizin için onu yönetmek için unittest çerçevesini kullanabilirsiniz testin
Bu, eğer isterseniz, testinizdeki çıkışı kontrol edebilmeniz avantajına da sahiptir. –
- 1. alaycı Ben Moq kullanarak birim testleri yazıyorum özelliği
- 2. Cakephp 2.0 Ben Cake 2.2, bir uygulama geliştiriyorum ve şu anda bazı birim testleri yazıyorum
- 3. Matris Ters Ben MathNet.Numerics.LinearAlgebra kullanan bazı C# kodu yazıyorum MathNet.Numerics
- 4. Birim Testleri için Global.asax?
- 5. Birim testleri için çerçeve testleri
- 6. Ortak veri yapıları için referans birim testleri?
- 7. Selenyum testleri ve birim testleri düzenlemek için en iyi yöntem
- 8. Eclipse: tüm birim testleri için bazı anahtarları bağla
- 9. SQLAlchemy Sorgu için birim testleri
- 10. VS2012 Birim Testleri
- 11. Java Swing'te yazdırma için birim testleri
- 12. Eclipse, sınıf testleri için classback-test.xml'yi birim testleri için bulamıyor
- 13. MsTest birim testleri kategorilerde gruplanabilir
- 14. yasemin birim testleri -
- 15. iPhone - Mantıksal birim testleri için Kaynaklar Alınıyor
- 16. Python Ben bir Excel dosyasına bazı verileri yazıyorum levha
- 17. Birim testleri nerede tutulur?
- 18. ASP.NET MVC ve iz çıktı hataları çıktı
- 19. StructureMap'i birim testleri ile kullanma
- 20. ';' Girişteki karakter yanlış yorumlandı
- 21. ng2 birim testleri için ng2-restangular nasıl?
- 22. Birim testleri için HttpContext'i nasıl taklit edebilirim?
- 23. Birim Test AS3 Kod Flaş
- 24. lateks (auctex) çıktı arabelleğini gizle
- 25. Pycharm birim testi etkileşimli hata ayıklama komut satırı çalışmıyor
- 26. Neden wget çıktı stdout yerine stderr?
- 27. AngularJS'de birim testleri ve e2e testleri nasıl düzenlenir?
- 28. UI denetimlerini kullanan birim sınama yöntemi
- 29. C# birim testi - aşırı yüklenmiş yöntem testleri için adlandırma kuralı
- 30. Hata: Ben Java bazı basit kod yapılan
Vay! Bu harika. Coz'den önce contextlib'den haberdar değildim hala Python 2.4 kullanıyorum. –
@shailesh, evet, contextlib __enter__' 'sahip bir sınıf yazma en basit bağlam yöneticilerinin yazma (kolaylaştırır ve' __exit__' elbette zor değil, ama bu şekilde, yeterince basit durumlar için şunları yapmanız daha az Demirbaş kodu var yaz ve oku;-). –
Neden 'sys.stderr = os.devnull' – Matt3o12