Интерактивный ввод / вывод с использованием Python

У меня есть программа, которая взаимодействует с пользователем (действует как оболочка), и я хочу запустить ее, используя модуль подпроцесса python в интерактивном режиме. Это означает, что я хочу иметь возможность писать в стандартный ввод и сразу же получать вывод из стандартного вывода. Я перепробовал множество предлагаемых здесь решений, но ни одно из них, похоже, не отвечает моим потребностям.

Код янаписано на основеЗапуск интерактивной команды из Python

import Queue
import threading
import subprocess
def enqueue_output(out, queue):
    for line in iter(out.readline, b''):
        queue.put(line)
    out.close()

def getOutput(outQueue):
    outStr = ''
    try:
        while True: #Adds output from the Queue until it is empty
            outStr+=outQueue.get_nowait()

    except Queue.Empty:
        return outStr

p = subprocess.Popen("./a.out", stdin=subprocess.PIPE, stout=subprocess.PIPE, stderr=subprocess.PIPE, bufsize = 1)
#p = subprocess.Popen("./a.out", stdin=subprocess.PIPE, stout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False, universal_newlines=True)

outQueue = Queue()
errQueue = Queue()

outThread = Thread(target=enqueue_output, args=(p.stdout, outQueue))
errThread = Thread(target=enqueue_output, args=(p.stderr, errQueue))

outThread.daemon = True
errThread.daemon = True

outThread.start()
errThread.start()

p.stdin.write("1\n")
p.stdin.flush()
errors = getOutput(errQueue)
output = getOutput(outQueue)

p.stdin.write("5\n")
p.stdin.flush()
erros = getOutput(errQueue)
output = getOutput(outQueue)

Проблема в том, что очередь остается пустой, как будто нет выходных данных. Только если я напишу в stdin все входные данные, которые программа должна выполнить и завершить, тогда я получу выходные данные (а это не то, что я хочу). Например, если я делаю что-то вроде:

p.stdin.write("1\n5\n")
errors = getOutput(errQueue)
output = getOutput(outQueue)

Есть ли способ сделать то, что я хочу сделать?

РЕДАКТИРОВАТЬ: Скрипт будет работать на машине с Linux. Я изменил свой сценарий и удалил universal_newlines = True +, установил размер буфера в 1 и сбросил stdin сразу после wrtie. Тем не менее я не получаю вывод.

Вторая попытка: Я попробовал это решение, и оно работает для меня:

from subprocess import Popen, PIPE

fw = open("tmpout", "wb")
fr = open("tmpout", "r")
p = Popen("./a.out", stdin = PIPE, stdout = fw, stderr = fw, bufsize = 1)
p.stdin.write("1\n")
out = fr.read()
p.stdin.write("5\n")
out = fr.read()
fw.close()
fr.close()

Ответы на вопрос(3)

Ваш ответ на вопрос