Имитировать стандартный вывод в поддельном подпроцессе.PopenPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Имитировать стандартный вывод в поддельном подпроцессе.Popen

Сообщение Anonymous »


Я хотел бы протестировать функцию, которая вызывает subprocess.Popen и захватывает stdout. В частности, мне нужно протестировать содержимое stdout, физически записанное в файл на диске, без вызова реального процесса.

Пример функции:

подпроцесс импорта функция функции(): с open('stdout.txt', 'wt') как out: subprocess.Popen(_cmdline(), stdout=out) def _cmdline() -> список[str]: # Или любой другой процесс, который мы хотим запустить вернуть ['ls'] Тестовая функция:

из макета импорта unittest защита test_captures_stdout(): с помощьюock.patch('subprocess.Popen') какock_popen: функция() # Попробуйте перехватить стандартный вывод и записать в него [(_, kwargs)] =ock_popen.call_args_list с kwargs['stdout']: buf.write('некоторый стандартный вывод') с open('stdout.txt') как buf: Assert buf.read() == 'какой-то стандартный вывод' Здесь я имитирую subprocess.Popen, затем перехватываю stdout, переданный его конструктору, и пытаюсь записать в буфер. Затем я собираюсь выполнить утверждения по содержимому файла stdout.txt.

Очевидно, когда я пытаюсь выполнить запись в буфер stdout, он уже закрыт, и я получаю ошибку ввода-вывода.

================================ ОШИБКИ ========= ========================= ____________________________ test_captures_stdout _____________________________ защита test_captures_stdout(): с помощьюock.patch('subprocess.Popen') какock_popen: функция() # Попробуйте перехватить стандартный вывод и записать в него [(_, kwargs)] =ock_popen.call_args_list > с kwargs['stdout']: E ValueError: операция ввода-вывода в закрытом файле. test_subprocess.py:22: ValueError ========================== краткая информация о тесте ================== ======== Интересно, есть ли удобный способ имитировать Popen и каким-то образом имитировать запись stdout в файл.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»