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 .

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

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