Obtención de la salida de un subproceso python

Estoy tratando de capturar la salida aquí. Si, en el indicador de python, ejecuto

p = subprocess.Popen(["/path/to/search_by_hash.par", hash_str], stdout=subprocess.PIPE) 

El valor de retorno (una lista) se imprime en la salida estándar, pero no se captura

 [4460475, 4406612, 4379510] 

He intentado seguirlo con

 value = p.communicate()[0] value 

..pero el valor es una cadena vacía, no la lista de entradas que esperaba, y que se está imprimiendo en stdout

Experimenté con las soluciones de salida de la tienda de subprocess.Popen la llamada en una cadena pero no he podido capturar la salida.

ACTUALIZAR:

stderr tampoco parece dar nada … y la lista que estoy buscando está siendo impresa … pero no tengo suerte en capturarla. Vea abajo:

 >>> p = subprocess.Popen(["/home/jfry/tools/search_by_hash.par", hash_str], stdout=subprocess.PIPE) >>> [4460475, 4406612, 4379510] value, err = p.communicate() >>> value '' >>> err 

¡Gracias!

Intente verificar stderr con p.communicate()[1] .

Porque la respuesta aceptada no resuelve el problema (al menos para mí):

Para capturar la salida stderr , se debe hacer lo siguiente:

 import subprocess p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) output, err = p.communicate() 

La parte crucial es el parámetro stderr=subprocess.PIPE , sin este parámetro, la salida- stderr no se capturará y err será None .

Si solo está interesado en el stderr -output, puede utilizar:

 p = subprocess.Popen(command, stderr=subprocess.PIPE) err = p.communicate()[1] 

En este caso p.communicate()[0] es None .

comunicar es un método. ¡Así que deberías llamarlo!

 out = p.communicate()