У меня есть случай, когда я хочу выполнить следующую команду оболочки в 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
Пропустил ли я некоторые моменты в моем коде? Любое предложение / идея? Заранее спасибо.