如何设置Fabric任务的工作目录?

时间:2012-04-23 12:56:02

标签: python fabric

假设我定义了一个简单的任务来列出远程服务器上的文件:

from fabric.api import run, env

env.use_ssh_config = True

def list_files():
    run('ls')

我执行它:

fab -H server list_files

如何为我正在运行的命令指定工作目录,而不是执行:

run('cd /tmp && ls')

对我来说这看起来不是很惯用?

免责声明:我一生中第一次看到Fabric,而且我是Python新手。

2 个答案:

答案 0 :(得分:42)

使用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 :(得分:3)

fabric 2.4.0的答案如下:

from fabric import Connection

conn = Connection(host=HOST_NAME, user=USER_NAME, connect_kwargs={'password': PASSWORD})

with conn.cd('/tmp/'):
    conn.run('ls -la')

fabric文档中没有涉及,但invoke documentation文档中没有涉及。