@@ -211,7 +211,8 @@ def readouterr(self):
211
211
212
212
@contextlib .contextmanager
213
213
def disabled (self ):
214
- capmanager = self .request .config .pluginmanager .getplugin ('capturemanager' )
214
+ capmanager = self .request .config .pluginmanager .getplugin (
215
+ 'capturemanager' )
215
216
capmanager .suspendcapture_item (self .request .node , "call" , in_ = True )
216
217
try :
217
218
yield
@@ -248,12 +249,20 @@ def __init__(self, buffer, encoding):
248
249
def write (self , obj ):
249
250
if isinstance (obj , unicode ):
250
251
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+" )
252
256
253
257
def writelines (self , linelist ):
254
258
data = '' .join (linelist )
255
259
self .write (data )
256
260
261
+ def fileno (self ):
262
+ self .write ('' )
263
+
264
+ return self .buffer .fileno ()
265
+
257
266
@property
258
267
def name (self ):
259
268
"""Ensure that file.name is a string."""
@@ -371,9 +380,13 @@ def start(self):
371
380
self .syscapture .start ()
372
381
373
382
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 = ''
377
390
if res :
378
391
enc = getattr (f , "encoding" , None )
379
392
if enc and isinstance (res , bytes ):
@@ -398,7 +411,10 @@ def suspend(self):
398
411
399
412
def resume (self ):
400
413
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 ()
402
418
403
419
def writeorg (self , data ):
404
420
""" write to original file descriptor. """
0 commit comments