Python - как выполнять команды оболочки с конвейером?

У меня есть случай, когда я хочу выполнить следующую команду оболочки в Python и получить результат,

echo This_is_a_testing | grep -c test

Я мог бы использовать этот python код для выполнения указанной выше команды оболочки в python,

>>> import subprocess
>>> subprocess.check_output("echo This_is_a_testing | grep -c test", shell=True)
'1\n'

Однако, поскольку я не хочу использовать параметр «shell = True», я попробовал следующий код python,

>>> import subprocess
>>> p1 = subprocess.Popen(["echo", "This_is_a_testing"], stdout=subprocess.PIPE)
>>> p2 = subprocess.Popen(["grep", "-c", "test"], stdin=p1.stdout)
>>> p1.stdout.close()
>>> p2.communicate()
(None, None)

Интересно, почему на выходе получается «None», поскольку Я сослался на описания на веб-странице: http://docs.python.org/library/subprocess.html#subprocess.PIPE

Пропустил ли я некоторые моменты в моем коде? Любое предложение / идея? Заранее спасибо.

33
задан user1129812 22 February 2012 в 10:54
поделиться