Почему shell=True съедает мой стандартный вывод subprocess.Popen?

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

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 для второго процесса, похоже, не имеет значения. Является ли это ожидаемым поведением?

10
задан Jake Biesinger 19 May 2012 в 00:55
поделиться