Warum hat shell=True Essen, meine Teilprozess.Popen stdout?

Scheint es, dass mit shell=True in der ersten Prozess-Kette irgendwie fällt das stdout von nachgelagerten Aufgaben:

p1 = Popen(['echo','hello'], stdout=PIPE)
p2 = Popen('cat', stdin=p1.stdout, stdout=PIPE)
p2.communicate()
# outputs correctly ('hello\n', None)

Machen der erste Prozess verwenden, shell=True tötet die Ausgabe irgendwie...

p1 = Popen(['echo','hello'], stdout=PIPE, shell=True)
p2 = Popen('cat', stdin=p1.stdout, stdout=PIPE)
p2.communicate()
# outputs incorrectly ('\n', None)

shell=True auf den zweiten Prozess scheint keine Rolle zu spielen. Ist dieses Verhalten zu erwarten?

Schreibe einen Kommentar