めもめも

このブログに記載の内容は個人の見解であり、必ずしも所属組織の立場、戦略、意見を代表するものではありません。

Python2.6 でコマンド出力をパイプで順次受け取る方法

意外とどこにも書かれていないようなので、メモしておきます。

#!/usr/bin/python

from subprocess import *

output = Popen( [ "vmstat", "1", "10" ], stdout=PIPE )

while True:
    line = output.stdout.readline()
    if not line: break
    print line

下記の方法だとコマンド出力が全部終わらないと表示されないので注意。

for line in output.stdout:
    print line

これは次のコードと同等に解釈されるためです。

for line in output.stdout.readlines():
    print line

Python の思想としてコマンド出力やファイル入力は、なるべく一度に読み込んでオンメモリで処理することが想定されているようです。