Python2で使うfabricとsubprocessはエラーハンドリングに気をつける

  • Fabricは、アプリケーションのデプロイやシステム管理のタスクのためにSSHの利用を簡素化するためのPython2系のライブラリとコマンドラインのツール

  • fab {method}でコマンドラインスクリプトで呼び出しができる

  • Pythonのsubprocessはサブプロセスを起動するためのモジュール。python内からコマンド実行するのに使う

  • この2つの組み合わせでのエラーハンドリングには気をつける

fab_test.py

from fabric.api import local

def hello():
    local("exit 1")

cmd.py

import subprocess

def main():
    subprocess.call("fab hello", shell=True)

main()
  • fab hello で実行して echo $?で確認すると1になる
  • python cmd.py で実行して echo $?で確認すると0になる
  • subprocess.callがエラーハンドリングに対応してない。
  • 代わりにsubprocess.check_callを使う
  • fabricの1系がpython2系の対応のためsubprocess.runが使えないのでエラーハンドリングが異なることに注意
    • 特にデプロイ周りのエラーで注意する