2012-04-23 21 views
20

Suponiendo defino una tarea trivial para listar los archivos en un servidor remoto:¿Cómo establecer el directorio de trabajo para una tarea Fabric?

from fabric.api import run, env 

env.use_ssh_config = True 

def list_files(): 
    run('ls') 

Y ejecutarlo con:

fab -H server list_files 

¿Cómo puedo especificar el directorio de trabajo para el comando que estoy corriendo , aparte de hacer:

run('cd /tmp && ls') 

¿Qué no me parece muy idiomático?

Descargo de responsabilidad: Estoy viendo a Fabric por primera vez en mi vida y soy totalmente nuevo en Python.

+1

no deje de tomar un vistazo a la [Tutorial] (http://docs.fabfile.org/en/1.4.1/tutorial.html), esta misma la pregunta está cubierta allí. – Morgan

Respuesta

37

Uso del 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

Pero, ¿qué sucede si quiero que ** todos ** mis comandos 'ejecutar' se ejecuten en el mismo directorio? ¿Tendré que envolver mi fabfile completo en un 'con cd()'? ¿No hay algo como 'env.working_dir = '/ my/dir''? – Dotl

Cuestiones relacionadas