Подпроцесс из подпроцесса с использованием регистрации ошибок с длинными данными - PullRequest
0 голосов
/ 04 января 2019

Я выполняю процесс Python "a" (графический интерфейс), который вызывает второй подпроцесс Python "b", который, в свою очередь, вызывает другой подпроцесс "c", исполняемый файл.Вывод процесса c передается по каналу b, который включает функцию регистрации.Вывод c включает несколько очень длинных строк (+ 37К символов), и программа b зависает при отправке этого вывода в функцию регистрации.Это своего рода черная дыра - она ​​входит в функцию логгера и просто завершается.

Запуск кода напрямую из командной строки работает нормально и отправляет вывод в print () или sys.stdout.write ()работает отлично.Запись коротких строк работает нормально.

Процесс обработки вызовов b выполняется следующим образом:

p = subprocess.Popen(cur_cmd2, stdout=subprocess.PIPE,
    stderr=subprocess.PIPE, bufsize=0, creationflags=0x08000000)

Затем процесс b вызывает процесс c следующим образом:

p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for line in p.stdout:        
    logger.info(line.rstrip('\n'))

Ошибка в последней строке (регистратор).Информация()).Обратите внимание, что следующая строка находится в разделе объявления:

logger = logging.getLogger(__name__)

Я предполагаю, что есть проблема с буфером.Я также предполагаю, что, поскольку программа, кажется, просто останавливается (пауза отладки не разбивается на код - кажется, что код python не выполняется), она, вероятно, пытается вывести сообщение об ошибке, но вывод перенаправляется, и онникогда не попадает в консоль или файл журнала.Все мои догадки не помогают мне понять, что я мог бы сделать, чтобы заставить его работать должным образом.Пожалуйста, сообщите.

...