关于python:Fabric env.hosts并以相同的方法运行=>

Fabric env.hosts and run in the same method => No hosts found

为什么?

1
2
3
4
5
from fabric.api import env, run

def update():
    env.hosts = ['apycat']
    run('cd /var/www/menu; svn up')

不工作时,我fab update,而:

1
2
3
4
5
6
from fabric.api import env, run

env.hosts = ['apycat']

def update():
    run('cd /var/www/menu; svn up')

做?

在文档中没有找到任何关于这个的信息。


在fab命令生成fab任务的主机列表后指定主机列表将不起作用。因此,对于第一个示例,您的更新任务没有主机列表集,因此允许下面的run()操作。文档中有一个很好的部分。

但也要注意的是,您可以通过两种方式中的一种来获得类似于第一种方式的用例。首先使用settings()上下文管理器:

1
2
3
def foo():
    with settings(host_string='apycat'):
        run(...)

另一个使用更新的api函数execute():

1
2
3
4
5
def bar():
    run(...)

def foo():
    execute(bar, hosts=['apycat'])