@@ -211,7 +211,8 @@ def readouterr(self):
211211
212212 @contextlib .contextmanager
213213 def disabled (self ):
214- capmanager = self .request .config .pluginmanager .getplugin ('capturemanager' )
214+ capmanager = self .request .config .pluginmanager .getplugin (
215+ 'capturemanager' )
215216 capmanager .suspendcapture_item (self .request .node , "call" , in_ = True )
216217 try :
217218 yield
@@ -248,12 +249,20 @@ def __init__(self, buffer, encoding):
248249 def write (self , obj ):
249250 if isinstance (obj , unicode ):
250251 obj = obj .encode (self .encoding , "replace" )
251- self .buffer .write (obj )
252+ try :
253+ self .buffer .write (obj )
254+ except OSError :
255+ self .buffer = open (os .devnull , "wb+" )
252256
253257 def writelines (self , linelist ):
254258 data = '' .join (linelist )
255259 self .write (data )
256260
261+ def fileno (self ):
262+ self .write ('' )
263+
264+ return self .buffer .fileno ()
265+
257266 @property
258267 def name (self ):
259268 """Ensure that file.name is a string."""
@@ -371,9 +380,13 @@ def start(self):
371380 self .syscapture .start ()
372381
373382 def snap (self ):
374- f = self .tmpfile
375- f .seek (0 )
376- res = f .read ()
383+ try :
384+ f = self .tmpfile
385+ f .seek (0 )
386+ res = f .read ()
387+ except OSError :
388+ self .tempfile = open (os .devnull , "r" )
389+ res = ''
377390 if res :
378391 enc = getattr (f , "encoding" , None )
379392 if enc and isinstance (res , bytes ):
@@ -398,7 +411,10 @@ def suspend(self):
398411
399412 def resume (self ):
400413 self .syscapture .resume ()
401- os .dup2 (self .tmpfile_fd , self .targetfd )
414+ try :
415+ os .dup2 (self .tmpfile_fd , self .targetfd )
416+ except OSError :
417+ self .targetfd = open (os .devnull , "r" ).fileno ()
402418
403419 def writeorg (self , data ):
404420 """ write to original file descriptor. """
0 commit comments