Я хочу, чтобы захватить и проанализировать выход для функции, которые делают это:Как издеваются sys.stdout (ERR, в) для subprocess.call
subprocess.call (арг, STDIN = sys.stdin, стандартный вывод = sys.stdout, STDERR = sys.stderr)
Когда я запускаю этот код без каких-либо издевается под py.test я получаю ошибку: ValueError: redirected Stdin is pseudofile, has no fileno()
Когда я залатать sys.stdin (и другие) с издеваться я получаю такая же ошибка.
Когда я патч sys.stdin с mock.mock_open()
я получаю ошибку: AttributeError: Mock object has no attribute 'write'
Когда я патч sys.stdin с mock.mock_open()('name', 'r')
я получаю исходную ошибку: ValueError: redirected Stdin is pseudofile, has no fileno()
Есть ли способ, чтобы передать какое-то фиктивный объект, как stdin/out для подпроцесса?
Я хочу что-то вроде этого:
mocked = (put something here)
subprocess_call('ls', stdin=mocked, stdout=mocked, stderr=mocked)
, который должен работать при запуске под py.test.
Спасибо.
Почему вы не издеваетесь 'subprocess.call'? Вы не проверяете, работает ли 'subprocess', только если код, * который использует *' subprocess', работает. –
Можно утверждать, что ваша работа не проверяет правильность работы внешней команды; вы хотите издеваться над 'subprocess_call'. – chepner
Этот тест является частью тестов интеграции, и я издеваюсь только на stdout/err, чтобы проверить результаты команды (потому что в противном случае они переходят непосредственно в пользовательский терминал). Мне нужен фактический внешний вывод программы (от «args»), чтобы увидеть, что моя программа и внешняя программа делают то, что они должны делать. –