Я выполняю процесс 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 не выполняется), она, вероятно, пытается вывести сообщение об ошибке, но вывод перенаправляется, и онникогда не попадает в консоль или файл журнала.Все мои догадки не помогают мне понять, что я мог бы сделать, чтобы заставить его работать должным образом.Пожалуйста, сообщите.