Catch stderr в subprocess.check_call без использования subprocess.PIPE

Я хотел бы сделать следующее:

  • выложить на другой исполняемый файл из Python, используя subprocess.check_call
  • поймать stderr дочернего процесса, если есть
  • добавьте вывод stderr в вывод исключения CalledProcessError из родительского процесса.

Теоретически это просто. Функциональная подпись check_call содержит kwarg для stderr :

 subprocess.check_call(args, *, stdin=None, stdout=None, stderr=None, shell=False) 

Однако, сразу ниже, в документации содержится следующее предупреждение:

Примечание . Не используйте stdout=PIPE или stderr=PIPE с этой функцией. Поскольку трубы не читаются в текущем процессе, дочерний процесс может блокироваться, если он генерирует достаточный вывод в канал для заполнения буфера для буфера OS.

Проблема в том, что почти каждый пример, который я могу найти для получения stderr из дочернего процесса, упоминает использование subprocess.PIPE для захвата этого вывода.

Как вы можете захватить stderr из дочернего процесса без использования subprocess.PIPE ?

One Solution collect form web for “Catch stderr в subprocess.check_call без использования subprocess.PIPE”

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

 file_handle = open('some_file', 'w') subprocess.check_call(args, *, stdin=None, stdout=file_handle, stderr=file_handle, shell=False) 

теперь каждая строка выводится в тот же файл, или у вас может быть другой файл для каждого.

stdin также читается как дескриптор файла, используя next() для чтения каждой строки в качестве команды ввода для отправки в дополнение к начальным args .

его очень надежная функция.

  • Временно перенаправить stdout / stderr
  • при импорте модуля при нажатии кнопки
  • Python: subprocess.call, stdout в файл, stderr в файл, отображение stderr на экране в режиме реального времени
  • Протокол Python разделен между stdout и stderr
  • Получить STDOUT, STDERR, не дожидаясь завершения процесса
  • print vs stderr
  • Как перенаправить stderr в Python?
  • В python я могу перенаправить вывод функции print в stderr?
  • Многопроцессорность Python: как я могу НАДЕЖДАТЬ перенаправление stdout из дочернего процесса?
  • Python: «subprocess.Popen» проверить успех и ошибки
  • Обтекание подпроцессом 'stdout / stderr
  • Python - лучший язык программирования в мире.