Почему shell = True ест мой подпроцесс. Открыть стандартный вывод?

Кажется, что использование shell = True в первом процессе цепочки каким-то образом отбрасывает stdout из последующих задач:

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

В первом процессе используется shell = True как-то убивает вывод ...

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

shell = True для второго процесса, похоже, не имеет значения. Это ожидаемое поведение?

Ответы на вопрос(1)

Ваш ответ на вопрос