Я пытаюсь запустить стороннюю программу с python и отправлять ей сообщения, читая ответ. Я не хочу перезапускать стороннюю программу после каждого сообщения.
Итак, что я упростил до этого кода:
process = subprocess.Popen([executable, "-b", paramValue],
stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True, bufsize=1)
# clear some startup message, which for some reason is written into stderr
process.stderr.readline()
while 100k+ loops:
process.stdin.write(txtInputLine)
resultLine = process.stdout.readline().strip()
processData(txtInputLine, resultLine)
Через некоторое время, часто через 30 минут после l oop запустил программу зависает и перестает работать. Похоже, readline () просто руки и перестает работать полностью.
Как я могу предотвратить это? Мне было бы хорошо, если бы мне пришлось перезапустить процесс (возможно, с использованием какого-то тайм-аута?), Если он потерпит неудачу или что-то в этом роде.
Но я даже не могу найти, где задокументирована readline (), кажется, это просто упомянуто в документации по подпроцессам, без полной документации по функции, и Google с трудом избегает цепочек людей, у которых есть проблемы с пропущенные символы новой строки и другие проблемы, препятствующие работе readline гораздо более детерминированным образом.