Как захватить stdout и stderr в приспособлении pytest с областью сеанса

как говорится в заголовке, я спрашиваю, есть ли способ захватить stdout и stderr, когда возникает исключение в приспособлении с областью сеанса? То, что я получаю сейчас, — это просто трассировка, которой на самом деле недостаточно, поскольку она не информирует меня о самой ошибке (настоящая информация находится в stderr). Я пытался использовать приспособление capsys, но оно ограничено функциями, так что это неправильный путь. Чего я хочу добиться, так это того, что я хотел бы «извлекать» stdout и stderr при возникновении ошибки и вызывать общее исключение Error, которое содержит этот вывод, а также дополнительную информацию об ошибке.

Я представляю что-то вроде этого:

import pytest 
@pytest.fixture(scope='session')
def session_fixture(request):
    try:
        # Critical part, which produces stdout/stderr output
    except Error as exc:
        # Extract stdout and stderr
        out, err = ...
        raise CustomError(stdout=out,
                          stderr=err,
                          ...
                          )

Спасибо за любые ответы.


person Milan Skála    schedule 26.07.2017    source источник


Ответы (1)


Я нашел решение, используя StringIO из модуля cStringIO.

http://kitchingroup.cheme.cmu.edu/blog/2013/09/27/Capturing-stderr-and-exceptions-from-python-in-org-mode/

person Milan Skála    schedule 26.07.2017