Have you ever written a Fabric script that work wonderfully well with remote hosts only to realise that it has a problem running locally? If that is the case, then env.host is your friend.
#! /usr/bin/env python
# save this as smartfab.py
from fabric.api import local
from fabric.api import run
from fabric.api import env
def run_that_job():
"""get some info about your host"""
cmd = "uname -a"
if env.host:
run(cmd)
else:
local(cmd)
If you run this script with the -H option, it will execute cmd using run(), but if you omit -H, cmd will be executed using local(). To see the difference for yourself, run
$ fab -f smartfab.py -H some_remote_host run_that_job
and compare results with:
$ fab -f smartfab.py run_that_job