次の2つのスクリプトは同じに見える。
#!/usr/bin/env python import os for i in xrange(100): cmd = "tail -f /var/log/syslog | cat " os.system(cmd)
#!/usr/bin/env python import subprocess for i in xrange(100): cmd = "tail -f /var/log/syslog | cat " subprocess.call(cmd, shell=True)
タイプ数が少ない分前者のほうが良さそうに見える。
でも、このスクリプトを止めようとしてCtrl-Cを押すと、前者はそのまま次のループが実行されてしまうのに対して、後者は例外を出して止まってくれる。
シグナルによる終了とは別に、終了コードが0で無かった場合にも例外を出してくれる subprocess.check_call も便利だ。