2012-04-23 7 views
20

Angenommen, ich eine triviale Aufgabe definieren, die Liste von Dateien auf einem Remote-Server:Wie wird das Arbeitsverzeichnis für eine Fabric-Aufgabe festgelegt?

from fabric.api import run, env 

env.use_ssh_config = True 

def list_files(): 
    run('ls') 

Und ich führen Sie es mit:

fab -H server list_files 

Wie kann ich das Arbeitsverzeichnis für den Befehl angeben Ich renne , außer zu tun:

run('cd /tmp && ls') 

Welche sieht mir nicht sehr idiomatisch?

Haftungsausschluss: Ich betrachte Fabric zum ersten Mal in meinem Leben und bin völlig neu in Python.

+1

sicher, dass Sie einen Blick auf die [Tutorial] nehmen (http://docs.fabfile.org/en/1.4.1/tutorial.html), dieser sehr Frage ist darin abgedeckt. – Morgan

Antwort

37

Verwenden Sie die 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

Aber was, wenn ich ** all ** meiner 'run'-Befehle im selben Verzeichnis ausführen möchte? Muss ich mein gesamtes Fabfile in ein 'mit cd()' verpacken? Gibt es nicht so etwas wie 'env.working_dir = '/ my/dir''? – Dotl