Я хотел бы выполнить несколько команд в автономном приложении, запущенном с python script, используя каналы. Единственный способ, которым я мог надежно передать команды на stdin программы, - использовать 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")
работает отлично, но приложение завершается.