Допустим, есть задача — из программы на Python интерактивно взаимодействовать с другой программой через стандартный ввод-вывод. Не один раз ввести данные и одни раз считать вывод, а писать-читать-писать-читать…
Вообще для запуска другой программы используется модуль subprocess (есть альтернативы, но они объявлены устаревшими).
Вот пример кода:
import subprocess
bconsole = subprocess.Popen(['bacula-console'], shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
bconsole.stdin.write('messages\n')
bconsole.stdout.read()
Однако при этом на последней функции программа зависает.
Есть метод communicate(). С данным кодом работает, но после его выполнения процесс завершается, что меня не устраивает, т.к. после считывания нужно вводить новые данные.
Собственно, как быть?