ОК, это простой однострочный текст, который хорошо работает:
В вашем doctest, до того, как потребуется захват журнала, выполните addHandler(logging.Streamhandler(sys.stdout))
на вашем регистраторе. Итак, предположим, logger
является вашим объектом регистрации:
"""
This is a doctest that will capture output from the logging module.
>>> logger.addHandler(logging.StreamHandler(sys.stdout))
The rest of your doctest, now able to use output from the logging
module...
"""
Объяснение: После того, как doctest запущен, doctest уже установил свой обман, поэтому sys.stdout
теперь имеет значение DocTestRunner._fakeout
. Если в этот момент вы создадите logging.StreamHandler
для sys.stdout, sys.stdout будет указывать на поддельные документы doctest для sys.stdout, а не на реальный sys.stdout.
Это решение также имеет преимущество, не зависящее от внутренних закрытых переменных в doctest, таких как _fakeout
или _SpoofOut
, на случай, если они изменятся в будущем.
Если вы получите:
error: [Errno 128] Transport endpoint is not connected
Вы, возможно, забыли import sys
.