¿Cómo puedo saber si mi subproceso está esperando mi entrada? (En python3)

archivo sp.py:

#!/usr/bin/env python3 s = input('Waiting for your input:') print('Data:' + s) 

archivo main.py

 import subprocess as sp pobj = sp.Popen('sp.py',stdin=sp.PIPE,stdout=sp.PIPE,shell=True) print(pobj.stdout.read().decode()) pobj.stdin.write(b'something...') print(pobj.stdout.read().decode()) 

main.py bloqueará en el primer pobj.stdout.read() , porque sp.py me está esperando.
Pero si quiero procesar la cadena ‘Esperando tu entrada:’ primero, ¿cómo puedo saber si sp.py me está esperando?
En otras palabras, quiero que la pobj.stdout.read() regrese cuando sp.py está esperando (o durmiendo debido a time.sleep() ).

Está bien, lo he resuelto. Mi código se basa en la lectura sin locking en un subproceso . PIPE en python (Gracias, @VaughnCato)

 #!/usr/bin/env python3 import subprocess as sp from threading import Thread from queue import Queue,Empty import time def getabit(o,q): for c in iter(lambda:o.read(1),b''): q.put(c) o.close() def getdata(q): r = b'' while True: try: c = q.get(False) except Empty: break else: r += c return r pobj = sp.Popen('sp.py',stdin=sp.PIPE,stdout=sp.PIPE,shell=True) q = Queue() t = Thread(target=getabit,args=(pobj.stdout,q)) t.daemon = True t.start() while True: print('Sleep for 1 second...') time.sleep(1)#to ensure that the data will be processed completely print('Data received:' + getdata(q).decode()) if not t.isAlive(): break in_dat = input('Your data to input:') pobj.stdin.write(bytes(in_dat,'utf-8')) pobj.stdin.write(b'\n') pobj.stdin.flush()