27

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

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 完全陌生。

4

2 回答 2

48

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')
于 2012-04-23T14:01:35.843 回答
18

答案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文档中。

于 2018-12-23T10:38:46.513 回答