Tengo un programa interactivo llamado my_own_exe
. Primero, imprime alive
, luego ingresa S\n
y luego imprime alive
nuevamente. Finalmente ingresa L\n
. Hace algunos procesamientos y salidas.¿por qué python.subprocess se bloquea después de proc.communicate()?
Sin embargo, cuando lo llamo desde la siguiente secuencia de comandos de python, el programa pareció colgarse después de imprimir el primer 'vivo'.
¿Alguien aquí puede decirme por qué sucede esto?
// después de leer las continuaciones (gracias chicos), he modificado el código de la siguiente manera:
import subprocess
import time
base_command = "./AO_FelixStrategy_UnitTest --bats 31441 --chix 12467 --enxutp 31884 --turq 26372 --symbol SOGN --target_date " + '2009-Oct-16'
print base_command
proc2 = subprocess.Popen(base_command, shell=True , stdin=subprocess.PIPE,)
time.sleep(2);
print "aliv"
proc2.communicate('S\n')
print "alive"
time.sleep(6)
print "alive"
print proc2.communicate('L\n')
time.sleep(6)
el programa ahora va bien con la primera entrada 'S \ n', pero luego se detuvo, y yo, el segundo 'L \ n' es un poco ignorado.
¿Alguien me puede dar una idea de por qué es así?
¿No se reinicia el proceso cada vez que llama a 'proc2'? ¿O no lo está llamando ya que tiene impresión delante de dos de ellos? Y si ese es el caso, ¿por qué está congelando después de la primera impresión y no la segunda? – Anthony
@Anthony: No. El proceso no se reinicia. Se está congelando después de la primera impresión porque 'communication' está esperando que el proceso termine, pero el proceso nunca termina porque probablemente esté bloqueado en la segunda solicitud (la que debe ingresar' 'L \ n''). – nosklo
gracias. de todos modos, esto solo resuelve el problema en parte, puedo usar comunicar solo una vez, ¿correcto? si necesito leer y escribir INTERACTIVAMENTE y leer y escribir, este "output = p.communicate ('S \ nL \ n') [0]" no podría funcionar, ¿correcto? –