以前Pythonのライブラリのsubprocessを使って、パイプでつないで複数のコマンドを実行するという内容の記事を書きました
しかしsubprocessのドキュメントなどに書かれている方法はめんどくさいので、どうしてもPythonでやる場合には以下の簡単な方法がおすすめです
subprocessでshを呼んで、shに引数として渡して実行させる
コマンドをパイプでつなげてその出力を得るにはこの方法が楽だと思います
import subprocess print subprocess.check_output('sh -c "echo {} | mecab"'.format('パイプでつなげる'), shell=True)
IPythonを使う
以前も紹介した高機能な対話的シェルのIPythonにはシェルコマンドの結果を変数に代入してくれる機能があるので、ちょっと試してみる分にはこちらのほうが使いやすいかもしれません
以下をIPythonで実行するとコマンドの結果が出力できます
ただしいくつか注意点があります
- 対話的にやるのではなくファイルを与えて実行する場合には、拡張子をpyではなくipyにしておかないとIPython特有のマジックコマンドは実行されないみたいです
- 改行区切りでリストに入れられた結果が返されます(オプションで変更できるみたいですが
- 日本語の文字列をWindows+IPythonで扱うとエラーを吐いたり文字化けしたりするときがあります
result = !echo コマンドの結果を変数に代入できる | mecab print result var = '変数展開もできる' result = !echo $var | mecab print result result = !echo {var + ', 式展開もできる'} | mecab print result