Я бы хотел выполнить несколько команд в отдельном приложении, запущенном из скрипта Python, используя каналы. Единственный способ надежно передать команды на стандартный ввод программы - использовать Popen.communicate, но он закрывает программу после выполнения команды. Если я использую Popen.stdin.write, то команда выполняется только 1 раз из 5 или около того, она не работает надежно. Что я делаю не так?
Для уточнения:
У меня есть приложение, которое слушает stdin для команд и выполняет их построчно.
Я хотел бы иметь возможность запускать приложение и передавать ему различные команды, основываясь на взаимодействии пользователей с графическим интерфейсом.
Это простой тестовый пример:
import os, string
from subprocess import Popen, PIPE
command = "anApplication"
process = Popen(command, shell=False, stderr=None, stdin=PIPE)
process.stdin.write("doSomething1\n")
process.stdin.flush()
process.stdin.write("doSomething2\n")
process.stdin.flush()
Я ожидаю увидеть результат обеих команд, но я не получаю никакого ответа. (Если я выполняю одну из строк Popen.write несколько раз, она иногда срабатывает.)
А если я выполню:
process.communicate("doSomething1")
работает отлично, но приложение закрывается.