@@ -372,6 +372,21 @@ def close_connection_and_file(multiprocess_fd, file):
372372 file .close ()
373373
374374
375+ @contextmanager
376+ def replace_environment (env ):
377+ env = env or {}
378+ old_env = os .environ .copy ()
379+ try :
380+ os .environ .clear ()
381+ for name , val in env .items ():
382+ os .environ [name ] = val
383+ yield
384+ finally :
385+ os .environ .clear ()
386+ for name , val in old_env .items ():
387+ os .environ [name ] = val
388+
389+
375390class log_output (object ):
376391 """Context manager that logs its output to a file.
377392
@@ -408,7 +423,8 @@ class log_output(object):
408423 work within test frameworks like nose and pytest.
409424 """
410425
411- def __init__ (self , file_like = None , echo = False , debug = 0 , buffer = False ):
426+ def __init__ (self , file_like = None , echo = False , debug = 0 , buffer = False ,
427+ env = None ):
412428 """Create a new output log context manager.
413429
414430 Args:
@@ -436,6 +452,7 @@ def __init__(self, file_like=None, echo=False, debug=0, buffer=False):
436452 self .echo = echo
437453 self .debug = debug
438454 self .buffer = buffer
455+ self .env = env # the environment to use for _writer_daemon
439456
440457 self ._active = False # used to prevent re-entry
441458
@@ -509,15 +526,16 @@ def __enter__(self):
509526 # just don't forward input if this fails
510527 input_multiprocess_fd = None
511528
512- self .process = multiprocessing .Process (
513- target = _writer_daemon ,
514- args = (
515- input_multiprocess_fd , read_multiprocess_fd , write_fd ,
516- self .echo , self .log_file , child_pipe
529+ with replace_environment (self .env ):
530+ self .process = multiprocessing .Process (
531+ target = _writer_daemon ,
532+ args = (
533+ input_multiprocess_fd , read_multiprocess_fd , write_fd ,
534+ self .echo , self .log_file , child_pipe
535+ )
517536 )
518- )
519- self .process .daemon = True # must set before start()
520- self .process .start ()
537+ self .process .daemon = True # must set before start()
538+ self .process .start ()
521539
522540 finally :
523541 if input_multiprocess_fd :
0 commit comments