Sto provando a parlare con un processo figlio utilizzando la chiamata subprocess.Popen() python. Nel mio codice reale, sto implementando un tipo di IPC, quindi desidero scrivere alcuni dati, leggere la risposta, scrivere altri dati, leggere la risposta e così via. Per questo motivo, non posso usare Popen.communicate(), che altrimenti funziona bene per il caso semplice.Lettura/scrittura di un sottoprocesso Popen()
Questo codice mostra il mio problema. Non ottiene mai la prima risposta, si blocca al primo "Risultato di lettura". Perché? Come posso fare questo lavoro come mi aspetto?
import subprocess
p = subprocess.Popen(["sed", 's/a/x/g'],
stdout = subprocess.PIPE,
stdin = subprocess.PIPE)
p.stdin.write("abc\n")
print "Reading result:"
print p.stdout.readline()
p.stdin.write("cat\n")
print "Reading result:"
print p.stdout.readline()
Effettivamente funziona! Il mio sed per qualche motivo usa -u per "unbuffered", non -l, ma funziona lo stesso. Questo risolve il mio codice di esempio, ma sfortunatamente non è il mio vero codice, poiché il comando attuale non è sed, ma un altro programma python. Buona risposta, hai individuato il problema. –
Sì, problema risolto. Il problema è stato il buffering dell'output del risultato. Fare un semplice stdout.flush() nel mio sottoprocesso ha risolto il problema. Grazie! –