2012-04-23 3 views
20

Supponendo definisco un compito banale per elencare i file su un server remoto:Come impostare la directory di lavoro per un'attività Fabric?

from fabric.api import run, env 

env.use_ssh_config = True 

def list_files(): 
    run('ls') 

E io eseguirlo con:

fab -H server list_files 

Come è possibile specificare la directory di lavoro per il comando sto correndo , altro che fare:

run('cd /tmp && ls') 

che non sembra molto idiomatica a me?

Disclaimer: Sto guardando Fabric per la prima volta nella mia vita e sono totalmente nuovo a Python.

+1

essere sicuri di dare un'occhiata al [Tutorial] (http://docs.fabfile.org/en/1.4.1/tutorial.html), questo molto la domanda è coperta lì. – Morgan

risposta

37

Utilizzare la 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') 
+1

Ma cosa succede se voglio ** tutti ** i miei comandi 'run' da eseguire nella stessa directory? Dovrò avvolgere il mio intero file in un 'con cd()'? Non c'è qualcosa come 'env.working_dir = '/ my/dir''? – Dotl