Entrada de subproceso sin bloque de Python con salida constante en Windows

Estoy tratando de ejecutar un comando con subproceso y los módulos _thread. El subproceso tiene un flujo de salida. Para combatir esto utilicé dos hilos, uno imprime constantemente nuevas líneas y el otro verifica la entrada. Cuando paso la entrada de subproceso a través deproc.stdin.write('Some string') devuelve 1 y luego no obtengo salida. La comunicación no funciona como la mayoría de las otras preguntas que he leído porque bloquea la espera de la EOF, aunque imprime la primera línea de lo que se devolverá. Vi algunas soluciones usando 'pty' pero no es compatible con Windows.

El archivo en la carpeta del servidor es solo un servidor de Minecraft si quieres probarlo tú mismo.

from subprocess import Popen,PIPE
import _thread
import sys
# asdf
proc = None
run = True
stdout = None
stdin = None


def getInput():
    global proc
    global run, stdin, stdout
    print("Proc inside the get input funct"+str(proc))
    inputs = input("Enter Something" + "\n")
    print("YOU ENTERED:", inputs)
    print("ATTEMPTING TO PIPE IT INTO THE CMD")
    run = True

    """----------------------------------------"""
    """        Works but blocks outputs        """
    """----------------------------------------"""
    # out,err=proc.communicate(bytes(inputs,'UTF-8'))
    # proc.stdin.flush()
    # print("Out is: "+out)




    """----------------------------------------"""
    """   Doesn't write but doesn't block      """
    """----------------------------------------"""
    # test = 0
    # test=proc.stdin.write(bytes(inputs,'UTF-8'))
    # print(test)
    # proc.stdin.flush()


def execute(command):
    global proc, stdin, stdout
    proc = Popen(command, cwd='C://Users//Derek//Desktop//server//',stdin=PIPE,stdout=PIPE,stderr=stdout, shell=True)
    lines_iterator = iter(proc.stdout.readline, "")
    print("Proc inside of the execute funct:"+str(proc))
    # print(lines_iterator)
    for line in lines_iterator:
        # print(str(line[2:-1]))
        # if line.decode('UTF-8') != '':
        print(line[:-2].decode('UTF-8')),  # yield line
        sys.stdout.flush()


threadTwo = _thread.start_new_thread(execute, (["java", "-jar", "minecraft_server.jar"], ))

while 1:
    if run and proc!=None:
        run = False
        threadOne = _thread.start_new_thread(getInput, ( ))

    pass

Respuestas a la pregunta(1)

Su respuesta a la pregunta