I am redirecting stdout to a logger, and now I spawned a process using multiprocessing.Process. However even though the processes stdout is redirected to the parent stdout, it ignores the sys.stdout override. Here is an example:
import multiprocessing
import sys
import logging
def worker():
print('Hello from the multiprocessing')
sys.stdout.flush()
class LoggerWriter:
def __init__(self, logger, level):
self.logger = logger
self.level = level
def write(self, message):
if message != '\n':
self.logger.log(self.level, "LOGGER: "+message)
def flush(self):
pass
if __name__ == '__main__':
logging.basicConfig(level=logging.INFO, format='%(message)s')
sys.stdout = LoggerWriter(logging.getLogger(), logging.INFO)
p = multiprocessing.Process(target=worker)
print("Hello from main")
p.start()
p.join()
I expected it to print
LOGGER: Hello from main
LOGGER: Hello from the multiprocessing
but Instead I get
LOGGER: Hello from main
Hello from the multiprocessing
It completely ignores the sys.stdout ... Why is that? Can the first case be achieved?
Note: This is on Windows 7 - seems like it might play a role.