Screaming Loud

日々是精進

subprocessとコマンドラインとリダイレクト

コマンドをPythonから入力するやり方.

基本

ls -l

こんなコマンドは以下の二通り.

import subprocess
subprocess.call("ls -l",shell=True)

とても単純.シェルを介してコマンドを実行している.
もう一つはシェルを介さない場合.

import subprocess
subprocess.call(["ls","-l"])

リダイレクトとパイプ

以上のようにリダイレクトやパイプも使えるが,出力を使いたい時に困る.
そこでそれらの使い方を紹介.
例えばテキストファイルをMeCabという形態素解析にかけたいとき

mecab < test.txt

このようなコマンドを入力するが実際は下のように直して入力している.

cat test.txt | mecab

ではsubprocess

import subprocess
import sys

file = sys.argv[1]

cat = subprocess.Popen(["cat",file],
                       stdout=subprocess.PIPE)

mecab = subprocess.Popen("mecab",shell=True,
                         stdin=cat.stdout,stdout=subprocess.PIPE)
output = mecab.stdout
for line in output:
    print line,

今回はリダイレクトに関して書いた.
パイプについても全く同じである.
それについてはsubprocess – プロセスを生成して連携する - Python Module of the Weekを参照して欲しい.