subprocess モジュールを使用したシェルのないクリーン バージョンの場合は、次の例を使用できます (ドキュメントから)。
output = `dmesg | grep hda`
になる
p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
p1.stdout.close() # Allow p1 to receive a SIGPIPE if p2 exits.
output = p2.communicate()[0]
Python プログラムは、ここで基本的にシェルが行うことを行います。つまり、各コマンドの出力を次のコマンドに順番に送信します。このアプローチの利点は、プログラマーがコマンドの個々の標準エラー出力を完全に制御できることです (必要に応じて抑制したり、ログに記録したりできます)。
subprocess.check_output('ps -ef | grep something | wc -l', shell=True)
そうは言っても、私は一般的に nneonneo によって提案されたシェル委任アプローチを代わりに使用することを好みます。これは一般的で、非常に読みやすく、便利です。