Python で子プロセスにコマンドを実行させて、それが失敗した場合を検出したい。 exit 1 的なアレ。 調べた結果以下のようにすれば良い模様。
import time import subprocess cmd = ('cat', '/hogehogehoge') p1 = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) time.sleep(0.001) if p1.poll(): print "it doesn't work..." print p1.stderr.readline()
time.sleep をするところが味噌。 実行結果は下記の通り
:!python % it doesn't work... cat: /hogehogehoge: そのようなファイルやディレクトリはありません
なお、このケースでは time.sleep はもっと短くても問題ないのですが起動に時間がかかるコマンドの場合は各自で調整しましょう。