Я просто не могу заставить StreamHandler работать со StringIO, чтобы принимать протоколирование от Процесса. Странно то, что поток на стандартный вывод работает просто отлично.
Это мой код:
from time import sleep
import logging
import multiprocessing
from io import StringIO
logBuffer = StringIO()
#logging.basicConfig(level=logging.DEBUG,stream=logBuffer)
logging.basicConfig(level=logging.DEBUG)
logging.debug('This will get logged')
def main():
for i in range(10):
logging.debug('i=%i' % i)
print(i)
sleep(0.5)
# start process
proc = multiprocessing.Process(target=main )
proc.start()
proc.join()
print(logBuffer.getvalue())
sleep(3)
с использованием logging.basicConfig(level=logging.DEBUG)
выводит все данные на стандартный вывод:
DEBUG:root:This will get logged
DEBUG:root:i=0
0
DEBUG:root:i=1
1
DEBUG:root:i=2
2
DEBUG:root:i=3
3
DEBUG:root:i=4
4
DEBUG:root:i=5
5
DEBUG:root:i=6
6
DEBUG:root:i=7
7
DEBUG:root:i=8
8
DEBUG:root:i=9
9
при попытке захвата с помощью StringIO с logging.basicConfig(level=logging.DEBUG,stream=logBuffer)
захватывает только текущий основной вывод:
0
1
2
3
4
5
6
7
8
9
DEBUG:root:This will get logged
Кто-нибудь может помочь? Также приветствуются другие решения для передачи выходных данных процесса в родительский процесс в режиме реального времени.