Parece que el uso de shell = True en el primer proceso de una cadena de alguna manera cae la salida estándar de tareas downstream:¿Por qué Shell = True come mi subproceso.Pobre stdout?
p1 = Popen(['echo','hello'], stdout=PIPE)
p2 = Popen('cat', stdin=p1.stdout, stdout=PIPE)
p2.communicate()
# outputs correctly ('hello\n', None)
Hacer la cáscara del primer uso = True proceso mata a la salida de alguna manera ...
p1 = Popen(['echo','hello'], stdout=PIPE, shell=True)
p2 = Popen('cat', stdin=p1.stdout, stdout=PIPE)
p2.communicate()
# outputs incorrectly ('\n', None)
shell = Verdadero en el segundo proceso no parece importar. ¿Es este comportamiento esperado?
Gracias! Para la posteridad, aquí está el [docs] (http://docs.python.org/library/subprocess.html): En Unix, con shell = True: si args es una secuencia, el primer elemento especifica la cadena de comandos, y cualquier elemento adicional se tratará como argumentos adicionales para el propio shell. Es decir, Popen hace el equivalente de: 'Popen (['/ bin/sh', '-c', args [0], args [1], ...])' –
muy poco documentado, En mi humilde opinión – Davide