@Chris,您看到此行为的原因是因为主机列表是 在 调用task函数 之前
构造的。因此,即使您要
env.hosts在函数内部进行更改,也要使它生效没有为时已晚。
而命令
fab setenv:foo mycmd:bar会产生您所期望的结果:
$ fab setenv:foo mycmd:bar[myhost] Executing task 'mycmd'['myhost'][myhost] run: ls
这与接受的答案相同,但是由于
setenv定义了方式,因此需要一个参数。
另一个例子:
from fabric.api import env, run, local, cdenv.hosts = ['other_host']def setenv(foo): env.hosts = ['myhost']def mycmd(foo): setenv(foo) print('env.hosts inside mycmd: %s' % env.hosts) run('ls')
输出为:
$ fab mycmd:bar[other_host] Executing task 'mycmd'env.hosts inside mycmd: ['myhost'][other_host] run: lsFatal error: Name lookup failed for other_hostUnderlying exception: (8, 'nodename nor servname provided, or not known')Aborting.
如您所见,
['other_host', ]架构开始执行时,主机列表已经设置为
mycmd。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)