How to set the working directory for a Fabric task?

Roberto Aloi picture Roberto Aloi · Apr 23, 2012 · Viewed 15.8k times · Source

Assuming I define a trivial task to list files on a remote server:

from fabric.api import run, env

env.use_ssh_config = True

def list_files():
    run('ls')

And I execute it with:

fab -H server list_files

How can I specify the working directory for the command I'm running, other than doing:

run('cd /tmp && ls')

Which doesn't look very idiomatic to me?

Disclaimer: I'm looking at Fabric for the first time in my life and I'm totally new to Python.

Answer

Daniel Hepper picture Daniel Hepper · Apr 23, 2012

Use the Context Manager cd:

from fabric.api import run, env
from fabric.context_managers import cd

env.use_ssh_config = True

def list_files():
    with cd('/tmp'):
        run('ls')