Espero que esta sea una pregunta simple de Python.¿por qué no subprocesamos.Popen (...) siempre regresa?
Cuando intento lo siguiente en el intérprete de Python:
>>> import process
>>> def test(cmd):
... p = subprocess.Popen(cmd)
...
>>> test(['ls', '-l'])
Se ejecutará el ls -l
, pero yo tenga que pulsar "retorno" para obtener un nuevo prompt >>>.
Sin embargo, cuando intento el siguiente:
>>> import process
>>> def test(cmd):
... p = subprocess.Popen(cmd)
... p.wait()
...
>>> test(['ls', '-l'])
Entonces el ls -l
se ejecutará con un prompt >>> inmediato presente.
Otra variación:
>>> import process
>>> def test(cmd):
... p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
...
>>> test(['ls', '-l'])
Esto me dará una nueva petición inmediata.
El último ejemplo es el más cercano a lo que deseo. Mi objetivo es lanzar un proceso hijo, esperar a que termine y luego utilizar su stdout en mi proceso principal consultando p.stdout
mientras dejo que stderr simplemente imprima donde lo haría de otra manera.
Ahora mismo en mi aplicación actual, la última versión se cuelga en el: p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
con o sin un p.wait()
.
Gracias,
Charlie
Sin redireccionar ninguno de los controladores estándar del subcomando, '.communicate()' no hará nada útil. Puede ser mejor reemplazarlo con una llamada 'wait()'. – glglgl