Pipes in subprocess werken alleen als de shell=True optie wordt gegeven. Dit is echter niet aan te raden.
Het kan ook op een andere manier met popen. Hier een demonstratie die ik van het internet geknipt en geplakt heb een die de Python processen uit PS haalt via een pipe naar grep:
import subprocess
import shlex
proc1 = subprocess.Popen(shlex.split('ps cat'),stdout=subprocess.PIPE)
proc2 = subprocess.Popen(shlex.split('grep python'),stdin=proc1.stdout,
stdout=subprocess.PIPE,stderr=subprocess.PIPE)
proc1.stdout.close() # Allow proc1 to receive a SIGPIPE if proc2 exits.
out,err=proc2.communicate()
print('out: {0}'.format(out))
print('err: {0}'.format(err))