Вам нужно реализовать протокол (соглашение поверх вашего транспортного протокола).
В вашей задаче вижу два решения:
1. Ждать завершения команды и отправить весь результат. Создаете буфер наполняете его до завершения дочернего приложения, а после формируете заголовок отправляете и к заголовку подцепляете буфер. Заранее длину заголовка должны знать обе стороны. Самой простой реализацией будет реализация в Twisted
twistedmatrix.com/documents/9.0.0/api/twisted.prot...
2. Создать подобие шины данных и передавать события. Одним из событий передача строки из приложения. Это отлично подойдет для "непрерывнух" (длгих или вечных) приложений генерирующих вывод. Так же можно поразмыслить над вводом в приложение и тут Вы реализуете интерсктивную подсистему SSH (в SSH еще есть и exec, sftp и т.д.). В целом для этой задачи с событиями уже можно применить готовые решения для шин данных ZeroMQ, системы AMQP и т.д.
Если вопрос не академический, то рекомендую обратить внимание на готовые системы оркестрации (по русски это наверное так звучит - прошу поправить в комментариях если иначе).